如何用c语言转换为大写

时间:2014-09-19 22:14:57

标签: c

我正在用c语言编写代码,该函数应该将输出发送到main()。每次我输入字符串并尝试将其转换为大写时,消息将显示“Segmentation fault” “

这是我的代码:

 char uppercase(char inputt[]);

在main()中:

case 'C': case 'c':
{
printf ("The string: %s \n", uppercase(inputt));

}
break;

我的职能:

char uppercase(char inputt[]) {
    int i=0, len[100];
    for(i = 0; inputt[i]; i++) {
        len[i] = toupper(inputt[i]);
    }
    return len[i];
}

谢谢

2 个答案:

答案 0 :(得分:2)

您在此行中获得了未定义的行为:

printf ("The string: %s \n", uppercase(inputt));

格式说明符%s需要一个空终止的C字符串。您传递的是uppercase的返回值,即char

一个可能的解决方法:

uppercase更改为有两个参数 - 一个用于输入,另一个用于输出。返回函数的输出。

char* uppercase(char input[], char output[]) {
    int i=0;
    for(i = 0; input[i]; i++) {
        output[i] = toupper(input[i]);
    }
    return output;
}

将其用作:

// Define an array for the output of uppercase.
char output[100]; //

case 'C': case 'c':
{
   printf ("The string: %s \n", uppercase(inputt, output));
}
break;

答案 1 :(得分:0)

在循环遍历inputt数组时看起来像是segfaulting。这可能是因为inputt数组的大小是任意的,len数组的长度是常数(在100)。所以,我假设您正在转换一个单词或简短的单词,然后您尝试在inputt数组和BAM之外读取!段错误。 (当评估inputt[i]以查看循环是否应该继续时,segfault最有可能出现在for循环中。)

我建议在toupper函数上阅读documentation(是的,它在C ++网站上,不要担心),并且还要传入要转换为字符串的长度。 uppercase功能。