将 strcpy 上的 SIGSEGV 发送到 char 指针

SIGSEV on strcpy to a char pointer

为什么我什至会在 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 }'";
        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,'[=10=]'); -- 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 失败,因为您正在处理可能不属于您或根本不存在的内存。