我有一个u_chars数组,我想用printf打印它。我不知道数组的大小:
u_char *ip_p;
printf("%s", ip_p); // EXC_BAD_ACCESS D:<
我想打印这个。我怎么能这样做?
答案 0 :(得分:6)
无法做到。指针不会神奇地包含有关指向的数据大小的信息。
如果没有约定(终结符字节或某处编码的长度),则无法知道有多少数据有效,因此无法打印多少数据。
答案 1 :(得分:1)
如果您不知道尺寸,您希望printf
如何知道?修复代码以将大小作为附加参数传递。然后你可以使用:
printf("%.*s", size, buf);
然而,您的数据看起来可能不是文本而是二进制文件。如果是这样,我质疑用printf
...
答案 2 :(得分:0)
如果ip_p
以NULL结尾,则代码有效。查看代码片段中的注释我会说它没有终止...
答案 3 :(得分:0)
如果您不知道数据的大小,您希望如何使用它?尺寸必须在某个地方可用,否则如何放在那里!?您必须知道大小或具有哨兵值,例如零字符。
如果它不是nul终止,则“%s”是不合适的格式说明符。此外,如果u_char值不是所有可打印字符,则不应使用%s甚至%c。您可以使用%c并将非打印字符替换为另一个。