c - 如何在C字符串中写入和读取一个以上的单词

标签 c linux string fifo

我正在编写程序,在这个程序中我有两个进程,服务器和客户端。服务器必须从输入中读取字符串,然后写入 FIFO 文件。客户端必须从 FIFO 文件中读取字符串,然后写入 .txt 文件。 这只是负责服务器和客户端的功能。文件 FIFO 和 fork 在 main 函数中进行。

void server(void)
{
    FILE *fp1, *fp2;
    char string[100];

    while(1)
    {
        fp1 = fopen("FIFO1", "w");
        fprintf(stdout, "Type string: ");
        scanf("%s", string);
        fputs(string, fp1);
        fclose(fp1);

        sleep(1);
    }
}
void client(void)
{
    FILE *fp,*fp1;
    char string[100];
    while(1)
    {
        fp = fopen("FIFO1", "r");
        fgets(string, 100, fp);
        fclose(fp);
        fp1 = fopen("file.txt", "a");
        fprintf(fp1,"%d_file: I get: %s\n", getpid(), string);
        fclose(fp1);    
    }
}

我的问题是,当我输入一个像“stack overflow”这样的字符串时,当我有两个词时,在我的 file.txt 中我得到了以下行:

8965_file: I get: stack
8965_file: I get: overflow

有没有办法把这个写在一行中?像这样:

8965_file: I get: stack overflow

最佳答案

这是因为 scanf()"%s" 说明符出现空白时停止读取,将其更改为 "%99[^\n]" 或使用 fgets() 代替,但请记住 fgets() 将读取 '\n'并且 fputs() 将添加一个,因此您最终可能会得到比您想要的更多的行。

提示:对于数组使用fgets(string, sizeof(string), fp); 使您的代码更易于维护。

关于c - 如何在C字符串中写入和读取一个以上的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34602338/

相关文章:

c - 在 C 中读取二维矩阵时检测到错误的大小

c++ - 将 std::map 移植到 C?

c++ - 控制台 ./a.out 不工作

c - 在 c 的 main 中传递参数

PHP 将字符串分成几部分

python - 将字符串分成 block ,然后将这些 block 传递给一个新对象。 python 3

c - C 中 strcat() 的段错误

c - STM32 I2C 设置 SDA 为低电平

Windows 中的 Linux 内核检查

c - 字符串常量前的语法错误