【发布时间】:2018-11-20 20:51:54
【问题描述】:
所以这是反转字符串的代码
#include<stdio.h>
char* function(char *);
int main()
{
char a[]="computer";
printf("%s", function(a));
return 0;
}
char* function(char *p)
{
int l,i;
char t;
for (l=0;*(p+l)!='\0';l++);
for(i=0; i<(l/2) ; i++)
{
t=*(p+i);
*(p+i)=*(p+l-1-i);
*(p+l-1-i)=t;
}
return (p);
}
但如果我将主体中的printf("%s", function(a)); 更改为
printf("%s", function("computer"));
在 dev c++ 中没有输出(输出为空白)....但它在 turbo c++ 中提供了所需的输出,即使进行了此更改....为什么会这样?
【问题讨论】:
-
当您使用第二个版本写入字符串文字时,您的程序会调用未定义的行为。这个网站上至少有一千个这个问题的重复,但标题很少反映实际问题,而且差异很大,很难找到。 Turbo C++ 可能比 您 更老,所以请使用现代编译器并将您的警告提高到迂腐水平。
-
提示:不要在算术表达式中使用
l和1和i。 -
@TimRandall 因为我们可以把它弄混对不对?
-
@AnasAziz 是的,很难阅读。我个人不喜欢使用单字母变量名,除非在
for循环或含义非常明显的情况下。我喜欢尽可能使用一两个单词的名字。
标签: c string pointers printf reverse