現在、私はargc、argv、tempのピースを渡しますが、コンパイルするとエラーは発生しませんが、後でプログラムで関数を呼び出してchar配列を渡すと。スタックダンプを返します。今まで私が学んだことから、配列は関数から戻すことができず、それがポインタを渡した理由です。ファイルを配列に作成する
int In2File(int argc, char *argv[], char *temp[]){
if (argc == 2) { //open file
FILE *user_file;
user_file = fopen(argv[1], "r");
if (user_file == NULL) {
printf("No data was found.\nEnd(Error 1)");
exit(2);
}
else {
int g = 0;//temp counter to load
char c = 0;
while ((c = fgetc(user_file)) != EOF && g <= tmplng - 1) { //Used Fgetc instead of fgets because Fgetc allows me to read
*temp[g] = c; //until the end of the file and read each character. Even if there is an \n character.
g++; // The second g < tmplng-1 is used to make sure that the \0 can be placed into the array.
}
printf("%s\n", temp);
fclose(user_file);//Closed the txt file that was loaded by user in args(1)
printf("\nFile Loaded.\n");
}
}
else if (argc > 2) { // Will exit if arguments are greater than 2.
printf("Format: %s 'filename'", argv[0]);
exit(1);
}
else {
printf("File not provided. Enter information:\n");//If the user doesnt provide a file allow manual input.
fgets(*temp, tmplng, stdin);
}
}
In2File(argc、argv、temp);
誰かが私がこの機能でどこが間違っていたのか考えていますか?私はいくつかの同様の記事を読んだが、C++とPythonのためのものだった。私はまだC++を学んだhaventはとPythonはC.
と呼ばれるこの獣に異なっている編集:
はconst int tmplng = 1000; //The only variables needed
char temp[tmplng]; //
char temp2[tmplng]; //
printf("Starting....\n"); //Used for testing debugging.
不要な 'else'ステートメントをすべて取り除くと、そのコードは簡単に従うことができます。例えば、 'exit(2);の後に' else 'はありません。 –
tmplngと同様に、いくつかのことをはっきりと理解できないので、コードをさらに追加してください。 –
この関数はどのように呼び出され、3番目の引数はどのように宣言されていますか? – dbush