此程序在点i=(strlen(data));
处崩溃并显示消息
没有可用于" strlen()"
的来源
但为什么?
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main (void) {
char data[]="Hallo";
char buffer[100];
if (strlen(data)!=0)
{
size_t i=0;
i=(strlen(data));
snprintf(buffer,i,"Data: %s \n",data);
return strlen(data)+1;
}
return -1;
}
答案 0 :(得分:5)
您引用的错误消息听起来不像是崩溃。更像是试图进入系统库函数的调试器。
答案 1 :(得分:1)
我怀疑问题的原因是
snprintf(buffer,i,"Data: %s \n",data);
这里的i
是“缓冲区大小”。 i
也是data
的长度。所以你要将一个字符串写入一个比缓冲区大小更长的缓冲区。结果是snprintf()
截断输出,因此不会写入整个data
字符串。
事实上,Data:
长度为六个字符,比i
(5)长。那么也许正在发生的事情是snprintf永远不会使用%s
修改过,它会以某种方式打破堆栈?
尝试将i
替换为sizeof(buffer)
,看看是否效果更好。
答案 2 :(得分:0)
我刚刚在Eclipse中运行了这个程序,它运行正常。听起来你是逐行逐步完成代码,当你进入strlen
调用时,你会进行“Step-Into”(F5)而不是“Step Over”(F6)。所以Eclipse正在尝试调试strlen
。
无论哪种方式,这都是Eclipse问题,我建议您在问题中添加Eclipse
标记。