我不是c程序员,我只知道基础知识。在我工作期间,我不得不处理别人的c代码。当我运行它时,此代码会出现分段错误。我使用gdb来调试它,结果发现错误的原因是使用" sprintf"。 这是解释问题的代码的一部分:
char* ptr
char str0 [1000]
char str1 [1000]
.
.
.
sprintf(str1," some text %s some other text %s ",ptr+1,str0);
我知道有一个溢出,但我不知道sprintf是如何工作的,或者如何中继第二个数组(str0)以满足第一个大小。
非常感谢
答案 0 :(得分:1)
您应该更改代码以使用snprintf()
,这需要额外的参数并进行检查,以便格式化的字符串不会溢出缓冲区:
snprintf(str1, sizeof str1, " some text %s some other text %s ",ptr+1,str0);
这与指针添加无关,这只是跳过字符ptr1
指向的第一个字符的一种方法。
答案 1 :(得分:0)
可能有两个原因。