Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 在字符指针数组中存储字符串时出错_C - Fatal编程技术网

C 在字符指针数组中存储字符串时出错

C 在字符指针数组中存储字符串时出错,c,C,我知道这个问题听起来很傻,但不知怎么的,我发现自己陷入困境,需要帮助。我有一个char*变量char*address=“/a/asdasd/c/sdfsdf/adsd”

我知道这个问题听起来很傻,但不知怎么的,我发现自己陷入困境,需要帮助。我有一个
char*
变量
char*address=“/a/asdasd/c/sdfsdf/adsd”char*store[5]。我试图通过跟踪斜杠(
/
)来划分变量
地址
中的内容,并尝试通过执行以下操作将每个部分存储到char指针变量
存储

char* store[5];
char* address="/a/asdasd/c/sdfsdf/adsd";
int k=0;
int j=0;
char* b=NULL;
for(int i=0;i<5;i++)
{
    if(b==0)
    {
        b=strchr(address,'/');
    }
    else
    {
        b=strchr(b,'/');
    }
    j=b-address;
    strncpy(store[i],address+k,j-k);
    k=j;
}

如果要复制指针,则不应调用strncpy()
,因为这会复制字符

你想要:

store[i] = address + (j - k);

假设
address+(j-k)
是部件所需的起点。

如果要复制指针,不应该调用
strncpy()
,因为这样会复制字符

char *store[5]
你想要:

store[i] = address + (j - k);
假设
地址+(j-k)
是零件所需的起点

char *store[5]
这只是一个字符指针数组。要在该数组的每个元素中存储字符串,需要malloc内存并将其分配给相应的指针

例如,您可以将代码更改为

store[i] = malloc ((j-k)+ 1); // +1 is for the null terminator. Pls check return value of malloc also.
strncpy(store[i],address+k,j-k); 
这只是一个字符指针数组。要在该数组的每个元素中存储字符串,需要malloc内存并将其分配给相应的指针

例如,您可以将代码更改为

store[i] = malloc ((j-k)+ 1); // +1 is for the null terminator. Pls check return value of malloc also.
strncpy(store[i],address+k,j-k); 

如果您不想拥有字符串标记的副本,如果您只想保留指针,那么只需将地址存储在store[i]中,正如@unwind指出的那样。或者,您也可以探索strtok()。唯一需要考虑的是,您需要有单独的数组来根据代码保持字符串的每个长度。希望这有帮助。

如果您不想拥有字符串标记的副本,如果您只想保留指针,那么只需将地址存储在store[i]中,正如@unwind所指出的那样。或者,您也可以探索strtok()。唯一需要考虑的是,您需要有单独的数组来根据代码保持字符串的每个长度。希望这有帮助。

是否应该有
intb=0某处?那
a
呢<代码>存储
?不,应该有char*b=NULL。我编辑了它。谢谢。还有两个未声明的变量。你的代码块应该是独立的,把部分声明隐藏在问题的文本中不是一个好主意。我编辑了您的代码以添加那些丢失的声明。只是一个建议-否则编译/运行代码会很困难。我的错,谢谢你的建议某处?那
a
呢<代码>存储
?不,应该有char*b=NULL。我编辑了它。谢谢。还有两个未声明的变量。你的代码块应该是独立的,把部分声明隐藏在问题的文本中不是一个好主意。我编辑了您的代码以添加那些丢失的声明。只是一个建议-否则它会使编译/运行代码变得困难。我的错,谢谢你的建议。我知道使用malloc,但我想避免它,因为这段代码将用于我们不使用malloc的项目,因为内存问题。没有其他方法可以解决它吗?你能把它做成一个像char store[5][100]那样的固定数组吗?在strncpy中,将第三个参数传递为(100-1)=99?我知道如何使用malloc,但我想避免它,因为这段代码将用于由于内存问题而不使用malloc的项目。没有其他方法可以解决它吗?你能把它做成一个像char store[5][100]那样的固定数组吗?在strncpy中,将第三个参数传递为(100-1)=99?