我决定reverse(s)
在C语言中创建一个函数,在此过程中,我在编译过程中遇到了2条警告消息。
alexander@debian:~/Dropbox/GitRepo/M2MPL/text$ make reverse
cc reverse.c -o reverse
reverse.c: In function 'reverse':
reverse.c:29:2: warning: return makes integer from pointer without a cast [enabled by default]
reverse.c:29:2: warning: function returns address of local variable [enabled by default]
alexander@debian:~/Dropbox/GitRepo/M2MPL/text$
由于他们警告我试着忽略他们并运行程序,当我输入一个字符数组Dropbox
使用scanf("%s", str1);
,其结果表现为Segmentation Fault
。
alexander@debian:~/Dropbox/GitRepo/M2MPL/text$ ./reverse
Enter a string to reverse: Dropbox
Segmentation fault
alexander@debian:~/Dropbox/GitRepo/M2MPL/text$
这是该reverse(s)
函数的实现:
/* reverse: returns a reversed string of s */
char reverse(char s[])
{
int i, len=strlen(s);
char result[LIMIT];
for (i = len; i >= 0; --i) {
result[len-i] = s[i];
}
return result;
}
我需要帮助才能知道为什么我得到的Segmentation fault
不是xobporD
结果,如果可能的话,还提出了解决此问题的建议。
首先:
编译器不会仅仅出于娱乐目的而警告您。如果您忽略编译器警告,则程序不会崩溃,您不会感到惊讶。
您将指针返回到在函数末尾超出范围的自动变量。返回给调用方的指针无效,因为它指向reverse
函数返回后不再存在的对象。
另一个问题是,您复制的第一个字符是,'\0'
因此结果字符串为空。您需要反转字符串的字符,但仍将放在'\0'
字符串的末尾。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句