gpt4 book ai didi

c - strncat() 上的段错误

转载 作者:太空宇宙 更新时间:2023-11-04 00:37:14 25 4
gpt4 key购买 nike

首先,我编写了一个简单的程序。

  1 #include <string.h>
2 #include <stdio.h>
3 #include <stdlib.h>
4
5 int main()
6 {
7 char *buf = (char*)malloc(sizeof(char)*2000);
8 char tmp[256];
9 strcpy (tmp, "test");
10 printf ("tmp: %s\n", tmp);
11 strncat (buf, tmp, strlen(tmp));
12 printf ("buf: %s\n", buf);
13 }

预期的结果是:

tmp: test
buf: test

但是在我将代码合并到我的大项目中之后。 (使用大量堆段)

153     char *inbuf = (char*)malloc(sizeof(char)*2000);
154 char *outbuf = (char*)malloc(sizeof(char)*2000);
155 char *oldinbuf = (char*)malloc(sizeof(char)*2000);
156 char *errbuf = (char*)malloc(sizeof(char)*2000);
157 memset (inbuf, '\0', strlen(inbuf));
158 memset (oldinbuf, '\0', strlen(oldinbuf));
159 memset (errbuf, '\0', strlen(oldinbuf));

然后在第 11 行,我收到错误消息 Segmentation fault (core dumped)

strncat是否有可能导致段错误?

最佳答案

这一行有未定义的行为

strncat (buf, tmp, strlen(tmp));

因为 buf 来自未初始化的 malloc。另一方面,strncat 期望 buf 包含一个以 null 结尾的 C 字符串。

您可以通过将 buf 的初始字符设置为 '\0' 来解决此问题。

关于c - strncat() 上的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27076270/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com