调试strlen时出现Eclipse错误

时间:2012-09-11 14:34:23

标签: c

此程序在点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;
}

3 个答案:

答案 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标记。