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个字符,最后一个元素为空终止。 printf是否忽略那些未初始化的元素,那些未初始化的元素是否包含随机数据?
答案 0 :(得分:4)
是的,printf()
仅打印字符,直到第一个\0
字符。所有C字符串函数都这样做。他们还会在必要时自动附加\0
字符,例如scanf()
函数。这就是为什么它被称为" 0终止字符串"。
其他元素可以包含任何内容,它们将被完全忽略。在实践中,它们通常包含随机垃圾,但它取决于多种因素。
请注意,在分配内存时,必须记住\0
字符。您的tcp_port
字符串最多只能包含99个字符,因为最后一个字符必须为0。