【发布时间】:2014-11-30 09:37:36
【问题描述】:
#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 上运行此代码时,我遇到了 segmentation fault。但在 www.indiabix.com 上,他们给出了答案:
如果你在windows平台上用Turbo C编译和执行这个程序,它会给出lice ice ce e 它可能在其他平台上给出不同的输出(取决于编译器和机器)。本站提供的在线 C 编译器会给出 Alice lice ice ce e 作为输出(它在 Linux 平台上运行)。
【问题讨论】:
-
那是什么书?他们真的像你一样修改吗?因为您从书中发布的答案表明他们只是在移动指针并打印它。而且无论书上说什么,都不允许修改字符串文字,这样做会导致未定义的行为。
-
@BlueMoon 答案表明他们确实将
*x设置为'\0'(x[n] == '\0'):没有它,编译器就无法将“lice ice ce e”作为输出。跨度> -
如果您认为下面的任何帖子回答了您的问题,请点击旁边的检查符号接受它。这将使答案浮到顶部,并为您和回答者奖励一些声望点。
标签: c linux pointers string-constant