【发布时间】:2013-01-17 22:50:55
【问题描述】:
在为我的 iOS Xcode 项目使用静态 C++ 库时,我遇到了 printf 和 Xcode LLDB 调试器的奇怪行为,有时我的打印结果 printf("%s", char*) 是与数字或垃圾字符连接的字符。所附图像不言自明。有什么想法吗?
【问题讨论】:
-
对您的代码进行文本复制和粘贴会更容易阅读和使用。
在为我的 iOS Xcode 项目使用静态 C++ 库时,我遇到了 printf 和 Xcode LLDB 调试器的奇怪行为,有时我的打印结果 printf("%s", char*) 是与数字或垃圾字符连接的字符。所附图像不言自明。有什么想法吗?
【问题讨论】:
似乎按预期工作。 %s 需要以 NUL 结尾的字符串,也就是说,对于给定的 char*,打印任何内容直到第一个 '\0'。如果您希望您的数组适合 %s,则必须分配 5 个字节并分配 a[4]=0;。
【讨论】:
printf("%s", blah) 一个指向非 NUL 终止数组的指针,则行为未定义。
如果使用%s 格式说明符打印字符数组a,则需要以'\0' 终止:
char * a = new char[5];
a[0] = 'i';
a[1] = 'p';
a[2] = 'o';
a[3] = 'd';
a[4] = '\0';
printf("word: %s\n", a);
【讨论】: