小写< - >大写函数不按计划工作

时间:2014-02-10 01:08:29

标签: c bitmask

所以,我要做的是创建一个将大写字符切换为小写的函数,反之亦然。

以下是我正在使用的内容:

#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;
}

在学习过程中。谢谢你的时间。

3 个答案:

答案 0 :(得分:2)

  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] = "";

  4. 解决这些问题后,它应该按预期工作。查看Ideone上的运行结果。

答案 1 :(得分:1)

您没有为flipped提供足够的空间。通过定义和初始化为:

char flipped[] = "";

你只给它一个字符,初始化为'\0',因为这种形式的定义只分配了足够的空间来保存给定的字符串,并且你已经传递了空字符串。 尝试

char flipped[100] = "";

答案 2 :(得分:1)

您的代码中有三个错误。

POINT1:

永远不会char flipped[] = "";像这样分配内存。这不是一个正确的程序。

POINT2:

请勿检查此while(*ptrword != NULL)之类的空字符。你应该像(* ptrword!='\ 0')这样检查。

点3:

switched需要终止。所以在while(*ptrword != NULL) { ...} set switched[counter]='\0'之后