我正在用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];
}
谢谢
答案 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
功能。