双指针的铸造及其在C语言中的应用
下面是一个简单的双指针代码以及我尝试使用的代码:双指针的铸造及其在C语言中的应用,c,segmentation-fault,double-pointer,C,Segmentation Fault,Double Pointer,下面是一个简单的双指针代码以及我尝试使用的代码: int argsCount = 1; char **cmdArgs1 = malloc((argsCount + 1)*sizeof(char*)); 我想在cmdArgs1中输入值,下面是我正在做的事情和导致seg故障的原因 for(counter = 0; counter < argsCount; counter++) { strcpy(cmdArgs1[counter],"ls"); } for(计数器=0;计数器
int argsCount = 1;
char **cmdArgs1 = malloc((argsCount + 1)*sizeof(char*));
我想在cmdArgs1中输入值,下面是我正在做的事情和导致seg故障的原因
for(counter = 0; counter < argsCount; counter++)
{
strcpy(cmdArgs1[counter],"ls");
}
for(计数器=0;计数器
我想我不能使用“cmdArg1[counter]”复制到“ls”,因为双指针不是那样工作的?我不确定
即使我认为这有点模糊,但我不知道如何表达这个问题,我会尝试根据评论进行更新。谢谢 您的
cmdArgs1
是指向指针的指针,这意味着它不足以为数组本身分配空间。您需要为单个字符数组(或单个C字符串)分配空间
您可以单独调用malloc
for(counter = 0; counter < argsCount; counter++)
{
cmdArgs1[counter] = malloc(strlen("ls")+1); // +1 for null terminator
strcpy(cmdArgs1[counter], "ls");
}
在这两种情况下,您的程序都有责任在free
ing数组本身之前free
ing数组元素:
for(counter = 0; counter < argsCount; counter++)
{
free(cmdArgs1[counter]);
}
free(cmdArgs1);
for(计数器=0;计数器
cmdArgs1[计数器]
未初始化。除非给它指定了一个有意义的值,否则不能引用它。你的意思是不是strlen(“ls”)+1
?这与斯特伦(“ls”+1)@DavidFoerster完全不同!谢谢
for(counter = 0; counter < argsCount; counter++)
{
free(cmdArgs1[counter]);
}
free(cmdArgs1);