Нижний регистр‹--›Прописные буквы не работают должным образом

Итак, я пытаюсь создать функцию, которая переключает прописные буквы на строчные и наоборот.

Вот с чем я работаю:

#include <stdio.h>
#include <stdlib.h>

int caplowswitch(char string[], char switched[]);

int main(){

    char name[] = "whyisthisnotworking";
    char flipped[] = "";

    caplowswitch(name, flipped);


return 0;
}

int caplowswitch(char word[], char switched[]){

    char *ptrword = word;
    unsigned short int counter = 0;

    printf("Your text input is: %s \n", word);

    while(*ptrword != NULL){

    switched[counter] = (*ptrword ^ 0x20);
    counter++;
    ptrword++;

    }

    printf("Your flipped text is: %s \n", switched);

    return 1;
}

В процессе обучения. Спасибо за ваше время.


person Brandacus    schedule 10.02.2014    source источник
comment
А это не работает... как? мы должны просто догадаться, в чем проблема? Мы здесь, чтобы помочь, а не быть вашими отладчиками.   -  person Marc B    schedule 10.02.2014
comment
Куда попадают символы, которые вы вставили в switched? (Подсказка: не в массиве, который переключается/переворачивается, так как он имеет длину всего один символ.)   -  person Hot Licks    schedule 10.02.2014


Ответы (3)


  1. Вы забыли добавить нулевое завершение к switched. Вам нужно добавить

    switched[counter] = '\0';  // add '\0' to the end
    

    до

    printf("Your flipped text is: %s \n", switched);
    
  2. Вам нужно изменить while(*ptrword != NULL) на while(*ptrword != '\0').

  3. Как указал @ooga, вам лучше выделить достаточно места для flipped. Поэтому измените char flipped[] = ""; на char flipped[100] = "";.

После устранения этих проблем он должен работать должным образом. Проверьте результаты работы на Ideone.

person herohuyongtao    schedule 10.02.2014
comment
Спасибо. Я не могу поверить, что пропустил это, ха-ха - person Brandacus; 10.02.2014
comment
Не забывайте и о других важных моментах, таких как недостаточное выделение памяти для flipped и ошибка использования NULL вместо '\0'. - person ooga; 10.02.2014

Вы не даете достаточно места для flipped. Определив и инициализировав его как:

char flipped[] = "";

вы даете ему только один символ, инициализированный '\0', поскольку эта форма определения выделяет достаточно места только для хранения данной строки, и вы передали пустую строку. Пытаться

char flipped[100] = "";
person ooga    schedule 10.02.2014

В вашем коде три ошибки.

Точка 1:

Никогда char flipped[] = ""; не выделяйте память таким образом. Это не правильная процедура.

Пункт 2:

Не проверяйте нулевой символ, как это while(*ptrword != NULL). Вы должны проверить это как while(*ptrword != '\0').

Пункт 3:

нулевое завершение требуется для switched. Итак, после while(*ptrword != NULL) { ...} set switched[counter]='\0'

person mahendiran.b    schedule 10.02.2014