0

文字列の 2 次元配列に値を代入する際に問題が発生しています。コードは次のとおりです。

  Char array[]= "Nary had a little lamb";
  int chunkSize = 4;
  char inventory[totalRuns][chunkSize];

  subString(result, array,0,0+chunkSize);
  printf("CHUNK 1 = %s\n",result);          //Prints "Nary"
  strncpy(inventory[0],result,chunkSize);
  memset(result, '\0', strlen(result));

  subString(result, array,pos,pos+chunkSize);
  printf("CHUNK 2 = %s\n",result);          // Prints " had"
  strncpy(inventory[1],result,chunkSize);

そして関数部分文字列:

char *subString(char* putHere, char* request,int start,int end){
    char* loc = request+start;
    char* end_loc = request+end;

    memcpy(putHere, loc, end_loc-loc);

    return putHere; 

}

このコードを実行すると、出力は

CHUNK 1 = ナリ

チャンク 2 = 持っていた

これは正しいですが、在庫を印刷すると、

inventory[0]=Nary had       //Should be just "Nary"
inventory[1]= had           //correct

ここで私が間違っていることはありますか?

4

1 に答える 1

2

subString宛先バッファをstrncpy0 で終了せず、指定された範囲内に 0 バイトがない場合も 0 で終了しません。したがって、終了していないシーケンスinventoryが含まれてcharおり、印刷はprintfどこかで 0 バイトが見つかるか、アクセス違反のためにクラッシュするまで印刷されます。

のメモリ レイアウトはinventoryのlast のinventory[1]直後にあるため、両方のチャンクが出力されます。これは、最初のチャンクが 0 で終了していないためです。あなたの場合はその直後に0バイトがあったようですが、初期化されていないので偶然です。inventory[0]charprintf("%s", inventory[0]);inventory

于 2013-03-05T22:14:40.647 に答える