У меня есть код, предназначенный для использования в гораздо более крупной программе. Он получает вход пользователя, а затем должен записывать этот вход в файл. Однако данные как-то теряются непосредственно перед/во время записи в файл. неC - Неожиданно изменяется значение массива символов
#include <stdio.h>
char *input();
void output(char text[1000]);
int main()
{
char text[1000]={'\0'}, *textPtr;
textPtr=text;
textPtr=input();
output(textPtr);
}
char *input()
{
char text[1000], *textPtr=text;
textPtr=text;
fflush(stdin);//Clears the newline character left by any prevoius scanf statements
scanf("%[^\n]s",textPtr);
return textPtr;
}
void output(char text[1000])
{
FILE *file;
printf("\nText before file statement:\n");
printf("%s\n",text);
//For some reason this line seems to trigger a change in 'text'
file=fopen("output.txt","a");
printf("\nText after file statement:\n");
printf("%s\n",text);
fprintf(file,"%s\n",text);
fclose(file);
printf("\nText after write and close statement:\n");
printf("%s\n",text);
}
отпечатке заявление в выходном то выходной функции, аналогичном это изображение независимо от того, входной
Так печатает желательное содержание «текст» непосредственно перед тем содержанием используется в предполагаемый путь, он затем заменяет это содержимое ничем и записывает только разрыв строки в текстовый документ, а затем в следующем заявлении на печать текст становится одним странным акцентированным символом (изменяется каждый раз, когда программа запускается).
Так что я верю, что у меня есть неправильно используемые указатели, или я возвращаю массив символов из функции странным образом.
Вы должны также проверить возвращаемое значение 'fopen'. – pzaenger
Возможный дубликат [Возврат указателя на автоматическую переменную] (http://stackoverflow.com/questions/1224042/returning-a-pointer-to-an-automatic-variable) –
'fflush (stdin);' invokes undefined поведение, он не определен для работы для входных потоков. – Lundin