我用C做了我的第一步(指针,指针指针等,我喜欢它),所以如果这是一个愚蠢的问题,请怜悯。
此片段不输出任何内容:
char buf[256];
snprintf(buf, sizeof buf, "output: %s%s%s");
puts("test");
这个片段输出" test" (如预期的那样):
char buf[256];
snprintf(buf, sizeof buf, "output: %s%s");
puts("test");
=>test
问题:snprintf在这里扮演哪个角色?与puts语句有任何关系,或者为什么第一个代码中的put没有效果/输出?
答案 0 :(得分:1)
因为snprintf(buf, sizeof buf, "output: %s%s%s");
需要3个参数:
snprintf(buf, sizeof buf, "output: %s%s%s", str1, str2, str3);
和snprintf(buf, sizeof buf, "output: %s%s");
需要2个参数:
snprintf(buf, sizeof buf, "output: %s%s", str1, str2);
如果你没有将参数传递给snprintf函数并不意味着snprintf不会尝试访问它们。因此,您看到的结果是由snprintf尝试访问不存在的“str3”参数导致的分段错误结果。