关于C中的字符串的困惑

时间:2015-03-20 21:51:39

标签: c string

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是否忽略那些未初始化的元素,那些未初始化的元素是否包含随机数据?

1 个答案:

答案 0 :(得分:4)

是的,printf()仅打印字符,直到第一个\0字符。所有C字符串函数都这样做。他们还会在必要时自动附加\0字符,例如scanf()函数。这就是为什么它被称为" 0终止字符串"。

其他元素可以包含任何内容,它们将被完全忽略。在实践中,它们通常包含随机垃圾,但它取决于多种因素。

请注意,在分配内存时,必须记住\0字符。您的tcp_port字符串最多只能包含99个字符,因为最后一个字符必须为0。