gpt4 book ai didi

c - strcpy 上的 SIGSEGV 到 char 指针

转载 作者:行者123 更新时间:2023-11-30 20:02:59 25 4
gpt4 key购买 nike

为什么我在 strcpy 上发生崩溃甚至。我尝试使用 sprintf 附加 0,\0,\n 并检查 gdb 是否正确附加,但仍然崩溃。使用 malloc 我不会崩溃,但有人告诉我在这种情况下不需要 malloc。

include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define MAX_LINE_SIZE 10

int main()
{

char* str[100];
int strCount=0;

char cCmd[] = "<some command>|awk '{print $1}'";
FILE *fp;
fp = popen(cCmd,"r");


if(cCmd != NULL)
{
char line[MAX_LINE_SIZE];
while (fgets(line, sizeof(line), fp) != NULL )
{
//str[strCount]=malloc(MAX_LINE_SIZE);
//sprintf(line,"%s%c",line,'\0'); -- even with appending a null character at the end it doesnt work
strcpy(str[strCount],line);
//strip(str[strCount]);
(strCount)++;
}
}
return 0;
}

最佳答案

问题出在这个语句strcpy(str[strCount],line)

char *str[100]; 声明一个包含 100 个未初始化指针的数组,其中每个指针都需要显式分配内存。

当您运行 str[strCount]=malloc(MAX_LINE_SIZE); 语句时,您实际上是在为单个指针分配内存,strcpy 会进一步使用该内存来复制字符串。

当您不使用 malloc 时,它是一个未初始化的指针(没有分配的内存),导致 strcpy 失败,因为您正在处理可能不属于您或根本不存在的内存。

关于c - strcpy 上的 SIGSEGV 到 char 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56815108/

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