我正在尝试将字符串传递给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;
}
它写入文件,但它写出奇怪的字符,而不是我实际键入的字符。我做错了什么?
答案 0 :(得分:2)
您似乎已将gets
与puts
混淆了。 puts
将一个字符串写入控制台。 gets
从控制台读取一个字符串。切换出来,你的程序应该可以工作。
Microsoft的编译器经常警告不安全或弃用的函数,例如gets
。您可以使用fgets
代替,因为它不允许缓冲区溢出。
以下是一个例子:
fgets(msg, 50, stdin);
或
fgets(msg, sizeof(msg), stdin);
答案 1 :(得分:0)
首先:不要调用您的函数read()
和write()
- 选择更具体的内容。函数名read()
和write()
已被系统用于低级文件操作,并且尝试自己定义它们将导致意外行为。
第二:你永远不会初始化msg
变量的内容或读取任何数据,因此其内容将是随机的。 (请记住puts()
打印数据;它没有读取任何内容。)
答案 2 :(得分:0)
当您编写char msg[50];
时,它包含不确定的值。它不是零初始化或任何东西。
puts(msg);
行写出这个垃圾,然后write(msg);
将垃圾写入文件。
我想您打算在printf
之后和puts
之前输入一些代码来输入文字。
NB。在您的read()
功能中(您还没有打电话),您应该使fgets
缓冲区大小与阵列的宽度相匹配,并且您应该检查您是否已经跑掉如果文件有很多行,则为数组的结尾。
同样明智的做法是将函数命名为read
和write
之外的其他函数,因为在POSIX环境中,已存在可能发生冲突的函数。
答案 3 :(得分:-1)
以下是解决方案:
#include <stdio.h>
#include <string.h>
int 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();why you were using this?
fclose(file_in);
// return 0;
}
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()
{
char msg[50];
read();
printf("Enter some text: ");
// getchar();
gets(msg);//It reads in msg
write(msg);
return 0;
}