-2

该程序在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;
}
4

3 回答 3

5

您引用的错误消息听起来不像是崩溃。更像是一个试图进入系统库函数的调试器。

于 2012-09-11T14:59:16.053 回答
1

我怀疑问题的原因是

snprintf(buffer,i,"Data: %s \n",data);

这里i是“缓冲区大小”。i也是 的长度data。因此,您正在将一个字符串写入比缓冲区大小更长的缓冲区。效果是snprintf()截断输出,因此不会写入整个data字符串。

实际上,Data:是六个字符长,比i(5)长。所以也许正在发生的事情是 snprintf 从不使用%s修改后的内容,这会以某种方式破坏堆栈?

尝试替换isizeof(buffer)看看是否效果更好。

于 2012-09-11T14:46:28.710 回答
0

我刚刚在 Eclipse 中运行了这个程序,它运行良好。听起来您正在逐行浏览代码,当您strlen接听电话时,您会执行“Step-Into”(F5)而不是“Step Over”(F6)。所以 Eclipse 正在尝试调试strlen

无论哪种方式,这是一个 Eclipse 问题,我建议您Eclipse在问题中添加一个标签。

于 2012-09-11T15:17:30.533 回答