#include<stdio.h>
#include<string.h>
int main()
{
int i, n;
char *x="Alice"; // ....... 1
n = strlen(x); // ....... 2
*x = x[n]; // ....... 3
for(i=0; i<=n; i++)
{
printf("%s ", x);
x++;
}
printf("\n");
return 0;
}
字符串常量不能修改。在上面的代码中,* x表示“ A”。在第3行中,我们尝试修改字符串常量。写下那句话是正确的吗?当我在Linux上运行此代码时,出现了分段错误。但是在www.indiabix.com上,他们给出了答案:
如果您在Windows平台上使用Turbo C编译并执行此程序,它将给虱子带来麻烦。在其他平台上,它可能会提供不同的输出(取决于编译器和计算机)。该站点提供的在线C编译器将为Alice lice icece e作为输出(在Linux平台上运行)。
您的分析是正确的。线
*x = x[n];
正在尝试修改字符串文字,因此它是未定义的行为。
顺便说一句,我检查了您链接的网站。仅仅浏览了两分钟,我已经发现了多个不正确的代码示例(仅举几个例子,使用gets
,使用char
(不是int
)来分配的返回值getchar
,等等),所以我的建议是不要使用它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句