私は C を初めて使用しますが、使用するパラメーターに応じてファイルから行を返す関数を作成しようとしています。そのパラメータを含む最後の行を返します。例を使用して説明する方が良いと思います:
ファイルの内容は次のとおりです。
1 one onehello
2 two twohello
3 one threehello
したがって、次のように関数を呼び出すと:
lineContaining("one")
「one threehello」を返す必要があります
これが私がこれまでに持っているものです。関数をテストするメイン関数も含まれています。
char *readStringedCommand(char *str1)
{
int size = 1024;
char *buffer = malloc(size);
char *result = malloc(size);
FILE *fp;
fp = fopen("test.txt", "r");
while(fgets(buffer, 1024, fp)) //get a line from a file
{
printf("while1 entered: %s", buffer);
int i = 0;
int j = 0;
int k = 0;
while(buffer[i] != '\n') //read all the way to the end of a line
{
printf("while2 entered: %s", buffer+i);
k = i;
while(buffer[k]==str1[j]) //while two characters match
{
printf("while3 entered");
k++;
j++;
strcat(result, buffer+k); //append the character to the result
if(str1[j] = '\0') //if the next character of str1 is the last one
{
strncat(result, buffer+k, 20); //append the rest of buffer to the result
return result;
printf("result = %s", result);
}
}
result[0] = '\0'; //clear result for the next line
j = 0; //set str1's position to 0
k = 0;
i++;
}
}
return "errorrrrrr";
}
int main(int argc, const char* argv[])
{
int num1 = 1;
char str1[] = "one onehello";
int num2 = 2;
char str2[] = "two twohello";
int num3 = 3;
char str3[] = "one threehello";
hwrite(num1, str1); //a function I made that writes a line to a file
hwrite(num2, str2);
hwrite(num3, str3);
printf("%s", readStringedCommand("one"));
return 0;
}
さて、関数は私にエラーを与えます:
while1 entered: 1 one onehello
while2 entered: 1 one onehello
while2 entered: one onehello
while2 entered: one onehello
Segmentation fault (core dumped)
3番目のwhileループでエラーが発生することを考えると、問題があると思います。残念ながら、ここで何が問題なのかわかりません。その時点以降、さらにエラーがあると確信していますが、これは私を混乱させています。
私の質問:
- このセグメンテーション エラーを修正するにはどうすればよいですか?
- コードは明らかに非常に醜いですが、私は C が苦手です。この問題を解決するためのより良い方法はありますか?
これをすべて読んでくれてありがとう。助けていただければ幸いです。=(
編集:皆さんから提案されたいくつかのエラーを修正した後、セグメンテーション エラーが発生しなくなりました。関数は代わりに "onehello" を返しますが、これは間違っています。「one threehello」を返す必要があります。しかし、私は進歩を遂げており、そのことに感謝しています。