在 C 语言中,Char 数组一直让我感到困惑。
下面是代码:
char tcp_port[100], udp_port[6];
tcp_port[99] = '\0'; udp_port[5] = '\0';
fscanf(fp, " tcp_port=%s", tcp_port);
fscanf(fp, " udp_port=%s", udp_port);
printf("%s\n", tcp_port); printf("%s\n", udp_port);
这可以工作并打印出正确的数字。但是,由于 tcp_port
有 100 个元素,那么这些元素如何在打印时消失呢?该端口只有 5 个字符长,最后一个元素以 null 结尾。 printf 是否只是忽略那些未初始化的元素,并且这些未初始化的元素是否包含随机数据?
最佳答案
是的,printf()
仅打印第一个 \0
字符之前的字符。所有 C 字符串函数都执行此操作。它们还会在必要时自动附加 \0
字符,就像其中的 scanf()
函数一样。这就是为什么它被称为“0 终止字符串”。
其他元素可以包含任何内容,并且它们将被完全忽略。实际上,它们通常包含随机垃圾,但这取决于多种因素。
请注意,分配内存时必须牢记 \0
字符。您的 tcp_port
字符串最多只能包含 99 个字符,因为最后一个必须为 0。
关于C 语言中关于字符串的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29176377/