0

我知道这个问题可能听起来很傻,但我不知何故发现自己陷入困境并需要帮助。我有一个char*变量char* address="/a/asdasd/c/sdfsdf/adsd";,我声明了一个 char 指针数组char* store[5];。我试图address通过跟踪斜杠(/)来划分变量中的内容,并尝试store通过执行以下操作将每个部分存储在 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+k,j-k)中有一个错误。编译器似乎不明白这store[i]是一个字符指针,而是认为它是一个字符。你能看看我如何解决这个问题吗?

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

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;
     }
4

3 回答 3

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); 
于 2012-06-14T11:16:58.613 回答
1

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

你要:

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

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

于 2012-06-14T11:08:42.410 回答
0

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

于 2012-06-14T11:35:44.720 回答