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

时间:2012-06-14 11:07:16

标签: c

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

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+k,j-k)中看到了错误。编译器似乎并不理解store[i]是一个char指针,而是认为它是一个char。你能看出我如何解决这个问题吗?

感谢所有帮助。我已经解决了。解决方案代码如下:

char* address="/a/asdasd/c/sdfsdf/adsd/asfsd";

     char store[5][100];
     char* b=NULL;
     int k=0;
     int j=0;
     for(int i=0;i<5;i++)
     {
         if(b==0)
         {
             b=strchr(address+1,'/');
         }
         else
         {
             b=strchr(b+1,'/');
         }
         j=strlen(address)-strlen(b);
         strncpy(store[i],address+k+1,j-k-1);
         store[i][j-k-1]='\0';
         printf("%s\n",store[i],j-k);
         k=j;
     }

3 个答案:

答案 0 :(得分:3)

char *store[5]

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

对于Ex,您可以将代码更改为

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); 

答案 1 :(得分:1)

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

你想:

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

假设address + (j - k)是零件的理想起点。

答案 2 :(得分:0)

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