関数から返された文字配列をmainの変数に代入するのに問題があります。関数から返された配列をcの変数に代入する
char *read(char filename[]) {
int i = 0;
am = 0;
char line[80];
char *record[100];
FILE *infile;
infile = fopen(filename, "r");
while (fgets(line, sizeof line, infile) != NULL) {
record[i] = strdup(line);
i++;
am++;
}
return record;
}
...
int main() {
char input[100];
char *record[100];
char input2[100];
char input3[100];
while (1) {
scanf("%[^\n]%*c", &input);
strcpy(input2, strtok(input, " "));
if (strcmp(input2, "print") == 0){
print(record);
...
else if (strcmp(input2, "read") == 0) {
strcpy(input3, strtok(NULL, " "));
record = read(input3); //input3 is the file name
}
return 0;
}
"read"で与えられた文字配列を "print"に渡したいが、失敗している。間違った入力はありません。
編集:私は動的に割り当てを試みましたが、私はまだ私が望むものを得ていません。私はそれを間違ってやったのですか?
char* read(char filename[]) {
int i = 0;
am = 0;
char line[80];
char *record = calloc(100, sizeof(char));
if (record == NULL) return NULL;
FILE *infile;
infile = fopen(filename, "r");
while (fgets(line, sizeof line, infile) != NULL) {
printf(line);
record[i] = strdup(line);
i++;
am++;
}
return record;
}
"誤った入力がない"とはどういう意味ですか?地獄への道は善意で舗装されています。 –
'record'はスタック変数です。関数がアドレスを返すと、それはもはや有効でなくなり、使用されるべきではありません。 –
この関数は文字配列を返しません。 – immibis