2017-05-07 39 views
-1

私はこの作業を試してみるのに何時間も努力してきましたが、結果は常に同じエラーとなり、プログラムは応答しませんでした。C言語:文字列を1つずつ配列にコピー

このファイルはチャットの履歴を表しており、すべての行からユーザー名を選択します。今はそれらを配列に追加したいので、例えば後でそれらを数えることができます。

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

int main(int argc, char* argv[]) 
{ 
    char const* const fileName = argv[1]; 
    FILE* file = fopen("beispielhafteGeschichte3", "r"); 
    char line[256]; 

    int i, j, k; 
    char new_array[15][30]; 


    while (fgets(line, sizeof(line), file)) 
    { 
    for (i=0; i<strlen(line); i++) 
    { 
     if (line[i-1]==']') 
      { 
      for(k=i; k<strlen(line); k++) 
       { 
       printf("%c", line[k]); 
       if (line[k+1]==':') break; 
       } 
      strncpy(new_array[i], line[k], 29); // ????? 
      printf("\n"); 
      } 
    } 
    } 

    fclose(file); 

    return 0; 
} 

strncpyを修正するにはどうすればよいですか?

+0

'strcpy'は問題ありません。障害はあなたのコードにあります。 – Olaf

+0

'if(line [i-1] == ']')'で配列の外側をチェックしている理由はありますか? (私は0から始まる) –

+0

しかしそれなしで、それはすべて正常に動作します。 –

答えて

0
for (i=0; i<strlen(line); i++) 
{ 
    if (line[i-1]==']') 

ループを介して初めて、iはゼロになり、あなたがline[-1]にアクセスしようとするだろう未定義の動作を呼び出した

+0

はい、わかります。しかし、私がユーザー名を列挙すると、それらはすべて ']'で始まります。 –

+0

私はそれをi-1と書こうとしましたが、それはすべて完璧でした –

0

ライン[k]はchar型であり、一方のプロトタイプstrncpyを関数は次のとおりです。

char *strncpy(char *dest, const char *src, size_t n) 

あなたはこのようなあなたのコードを編集して試してみてください:

strncpy(new_array[i], line+k, 29); 
関連する問題