c - 将字符串传递给函数

标签 c string io

我正在尝试将字符串传递给 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;
}

它会写入文件,但会写入奇怪的字符,而不是我实际键入的字符。我做错了什么?

最佳答案

看起来您混淆了 getsputsputs 将字符串写入控制台。 gets 从控制台读取一个字符串。将它们关闭,您的程序应该可以运行。

Microsoft 的编译器经常针对不安全或弃用的函数发出警告,例如 gets。您可以改用 fgets,因为它不允许缓冲区溢出。

这是一个例子:

fgets(msg, 50, stdin);

fgets(msg, sizeof(msg), stdin);

关于c - 将字符串传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23575696/

相关文章:

c - 关于洗牌程序如何工作的最佳解释是什么?

java - 动态提取 URL 的最后部分

java - 如何使用 Java 正则表达式 API 中的 Pattern、Matcher 删除特定行

linux - I/O 内存访问可以在 Linux (ARM) 下的 ISR 中使用吗?

c - 使用 Read() 的低级 I/O

C 结构错误 : Dereferencing pointer to an incomplete type

使用 strcmp/strncmp 比较 int8_t 和 char*

Java 字符串引用

java - 如何检查文件是否可以删除?

c - 链表的结构如何知道其自身类型的下一个指针的类型?