2012-06-14 84 views
0

我知道这个问题可能听起来很愚蠢,但我不知何故发现自己卡住了,需要帮助。我有一个char*变量char* address="https://stackoverflow.com/a/asdasd/c/sdfsdf/adsd";并且我声明了一个char指针数组char* store[5];。我试图通过跟踪斜杠(/)在可变address内容划分,并试图通过执行以下操作在char指针数组中存储字符串的错误

char* store[5]; 
char* address="https://stackoverflow.com/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; 
} 

在字符指针变量store各部分储存,但我看到,在代码strncpy(store[i],address+k,j-k)有一个错误。编译器似乎不明白,store[i]是一个字符指针,它宁可认为它是一个字符。你能看到我能如何解决这个问题吗?

感谢您的帮助。我解决了它。解决方案的代码如下:

char* address="https://stackoverflow.com/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; 
    } 
+0

应该有一个'int b = 0;'某处?那么'a'呢? 'store'? – Levon

+0

不,应该有char * b = NULL。我编辑它。谢谢。 –

+0

还有两个未申报的变量.. – Levon

回答

3
char *store[5] 

这只是一个char指针数组。要将字符串存储在此数组的每个元素中,您需要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); 
+0

我知道使用malloc,但我想避免它,因为此代码将用于我们不使用malloc的项目,因为内存问题。没有其他解决方法吗? –

+0

你可以让它像char store [5] [100]这样的固定数组吗?并在strncpy中,传递第三个参数为(100-1)= 99? – Jay

+0

这是工作,如果我确实存储[5] [100]。谢谢 –

1

如果你想复制一个指针,你不应该叫strncpy(),因为那份文字。

你想:

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

假设address + (j - k)对于部分所需的起点。

0

如果你不希望有串令牌的副本,如果你喜欢只保留了三​​分球,然后就存储在地址将@unwind存储为[i]指出。否则,你也可以探索strtok()。只是认为你需要有单独的数组来根据你的代码保持每个字符串的长度。希望这可以帮助。

相关问题