0

この質問はばかげているように聞こえるかもしれませんが、どういうわけか行き詰まり、助けが必要であることに気付きました。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)しかし、コードにエラーがあることがわかりました。コンパイラはそれがcharポインタであることを理解していないようstore[i]で、むしろ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;
     }
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 に答える