【发布时间】:2016-02-11 05:56:10
【问题描述】:
在 StackOverflow 上找不到任何可以解决此问题的问题。
我知道 char* 数组不必以 NULL 结尾,但想知道您希望它何时结束?
例如,在调试我的代码时,我使用了大量的 printf() 来查看我的变量在代码的某个阶段是否正确。
我有一个包含 4 个 char* 的 char** 值,我将最后一个 char* 设为 NULL。 使用 NULL 终止,从 values[0] 到 values[3] 的 printfs 给了我这个 注意:names 只是我在完成打印值数组后立即打印的另一个数组
Testing values1[0]: %HOME/bin:%PATH
Testing values1[1]: /%HOME/include
Testing values1[2]: /%HOME/lib
Testing values1[3]: (null)
Testing names2[0]: PATH
Testing names2[1]: IDIR
Testing names2[2]: LIBDIR
我有一个带有 3 个 char* 的 char**,所有这些都是有效的 char*。 没有 NULL 终止,从 values[0] 到 values[3] 的 printf 给了我这个(名字不显示)
Testing values1[0]: %HOME/bin:%PATH
Testing values1[1]: /%HOME/include
Testing values1[2]: /%HOME/lib
我认为当 printf(...., values[3]) 是未定义的行为时,例如打印垃圾值,但如上面的输出所示,包括 printf(...., values[3]) 似乎没有被执行。
【问题讨论】:
-
NULL和null不同... -
对不起,我没听懂。我做了 values[3] = NULL; NULL 和 null 有什么区别?
-
values[3] = NULL是有效的,但是,printf("%s", values[3])不是... -
你的问题不是很清楚。打印值的循环是什么样的?将
NULL指针作为指针数组的 sentlnel 值是有意义的,但您的程序也必须以某种方式使用该值。 -
答案是:任何时候你将字符数组用作
string(例如,将它传递给需要nul-terminated字符串的函数),数组必须是 nul-terminated 或未定义的行为将导致您传递数组的任何函数愉快地读取超出数组末尾以寻找 nul-terminating 字符。跨度>
标签: c arrays pointers char printf