如何在C字符串

时间:2016-01-05 00:26:34

标签: c linux string fifo

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

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);    
    }
}

我的问题是,当我输入一个字符串,如#34;堆栈溢出",当我有两个单词时,在我的file.txt我得到的行:

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

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

8965_file: I get: stack overflow

2 个答案:

答案 0 :(得分:2)

由于scanf()"%s"说明符出现空格而停止阅读,因此将其更改为"%99[^\n]"或使用fgets()代替但{请注意,fgets()会读取'\n'fputs()会添加一行,因此您可能会得到比您想要的更多的行。

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

答案 1 :(得分:-2)

您可以使用gets(string)获取多个字词,而不是使用scanf()

参考链接:www.keizerkong.com/c/c_string.html