我正在尝试将字符串传递给 C 中的函数。该字符串将由用户输入,然后传递给函数以写入文本文件。我知道这看起来很基础,但我只是在学习 C。
#include <stdio.h>
#include <string.h>
void read() {
char text[50][30],buffer[150];
int i=0;
FILE *file_in;
file_in=fopen("test.txt","r");
if (file_in == NULL) {
printf("Error opening file\n");
}
while (fgets(buffer,150,file_in)) {
strcpy(text[i],buffer);
printf("line %d: %s\n",i,text[i]);
i++;
}
getchar();
fclose(file_in);
}
void write(char str[])
{
FILE *file_in;
file_in=fopen("test.txt","a");
if (file_in == NULL) {
printf("Error opening file\n");
}
//write to the file
fprintf(file_in, "\n%s", str);
// fputs(str, file_in);
fclose(file_in);
}
int main()
{
read();
char msg[50];
printf("Enter some text: ");
puts(msg);
write(msg);
return 0;
}
它会写入文件,但会写入奇怪的字符,而不是我实际键入的字符。我做错了什么?
最佳答案
看起来您混淆了 gets
和 puts
。 puts
将字符串写入控制台。 gets
从控制台读取一个字符串。将它们关闭,您的程序应该可以运行。
Microsoft 的编译器经常针对不安全或弃用的函数发出警告,例如 gets
。您可以改用 fgets
,因为它不允许缓冲区溢出。
这是一个例子:
fgets(msg, 50, stdin);
或
fgets(msg, sizeof(msg), stdin);
关于c - 将字符串传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23575696/