【发布时间】:2014-05-03 20:14:20
【问题描述】:
我见过两种终止字符串的方法。
// char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\n'}; //ignore this one, /n does not terminate
char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'}
和
char greeting[6] = {'H', 'e', 'l', 'l', 'o', 0};
出于好奇,哪个更标准?
我的另一个问题是下面的代码
char greeting[] = {'H', 'e', 'l', 'l', 'o'};
printf("Greeting message: %s\n", greeting );
//output message is Greeting message: Hello? Question mark is upside down in Xcode
这里发生了什么?我希望编译器能够检测字符串本身的大小并在最后一个字符之后添加一个终止字符。然后在那个 printf 语句中,它会在 'o' 之后停止。为什么有一个?那里?还有它怎么知道在“?”之后停止。 ?它是否有可能继续运行并拆分随机字符,直到它崩溃或奇迹般地在内存中找到一个随机的空终止字符?
【问题讨论】:
-
'\n' 不终止字符串。
-
抱歉,感谢您接听。问题已被编辑。
-
0和'\0'意思完全一样;它们都是int类型的常量,值为0。使用更清晰的那个——如果要存储为char,则应该是'\0'。或者只使用像"hello"这样的字符串文字,它隐式以零结尾,甚至更清晰。