我有一些代码打算在更大的程序中使用,它获取用户的输入,然后将该输入写入文件,但是数据在写入文件之前/期间以某种方式丢失。
#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);
}
无论输入如何,输出函数中的 print 语句都会输出与此图像类似的内容
因此,它会在按预期方式使用这些内容之前直接打印所需的“文本”内容,然后将这些内容替换为空,并仅在文本文档中写入换行符,然后在下一个打印语句中文本变成一个奇怪的重音字符(每次程序运行时都会有所不同)。
所以我相信我误用了指针,或者我以一种奇怪的方式从函数返回 char 数组。
最佳答案
textPtr=input();
在函数 input
返回时释放堆栈上的新指针,然后可以再次使用该内存(堆栈)。
要解决此问题,您必须将 textPtr
作为 input
input(textPtr);//the call
input(char * textPtr){//the function
fflush(stdin);//Clears the newline character left by any prevoius scanf statements
scanf("%[^\n]s",textPtr);
}
关于C - char 数组的内容意外更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33073630/