Я работаю над какой-то программой обмена файлами, которая написана на C. Существует функция, которая может читать файл данных и хранить данные в строке и возвращать эту строку в главную функцию и основная функция отправляется обратно клиенту. Коды показаны нижеВозвращение указателя char в C
char* ListFiles(){
FILE *fp;
char file[30];
char *f;
if((fp=fopen("list","r"))==NULL)
{
...
}
while (!feof(fp))
{
fgets(file,50,fp);
}
fclose(fp);
f=file;
printf("%s",f); //get display!!!
return f;
}
int main(){
char *files;
...
...
files=ListFiles();
printf("%s",files); //nothing display!!
sent();
}
Однако этот способ не работает. Ничего не видно и, конечно, ничего не отправлено. Но я получаю правильный дисплей в функции ListFiles(). Я не знаю, что произойдет. Я также использую strcpy(), и он все еще не работает.
'char file [30]; char * f; f = file; 'ничего хорошего здесь не происходит. Подумайте еще об этом и напишите правильно. – Griwes
Это не связано, но ваша переменная 'file' может содержать только 30 символов, и вы читаете больше. 'file' будет переполняться. – rid
Кроме того, 'fgets' будет вызываться повторно с тем же буфером, пока файл не достигнет конца, так что после цикла буфер будет содержать только последнюю часть файла. –