如何在C字符串中写入和读取一个以上的单词
How to write and read more than one word in C string
我正在编写程序,在这个程序中我有两个进程,服务器和客户端。服务器必须从输入中读取字符串,然后写入 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);
}
}
我的问题是当我输入像 "stack overflow" 这样的字符串时,当我有两个单词时,在我的 file.txt
中我得到了行:
8965_file: I get: stack
8965_file: I get: overflow
有什么办法可以把它写成一行吗?像这样:
8965_file: I get: stack overflow
这是因为 scanf()
当 "%s"
说明符出现白色 space 时停止读取,将其更改为 "%99[^\n]"
或使用 fgets()
代替但请记住,fgets()
将读取 '\n'
,而 fputs()
将添加一个,因此您最终可能会得到比您想要的更多的行。
提示:对于数组,使用fgets(string, sizeof(string), fp);
使您的代码更易于维护。
您可以使用 gets(string)
来获取多个单词,而不是使用 scanf()
。
参考 Link : www.keizerkong.com/c/c_string.html
我正在编写程序,在这个程序中我有两个进程,服务器和客户端。服务器必须从输入中读取字符串,然后写入 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);
}
}
我的问题是当我输入像 "stack overflow" 这样的字符串时,当我有两个单词时,在我的 file.txt
中我得到了行:
8965_file: I get: stack
8965_file: I get: overflow
有什么办法可以把它写成一行吗?像这样:
8965_file: I get: stack overflow
这是因为 scanf()
当 "%s"
说明符出现白色 space 时停止读取,将其更改为 "%99[^\n]"
或使用 fgets()
代替但请记住,fgets()
将读取 '\n'
,而 fputs()
将添加一个,因此您最终可能会得到比您想要的更多的行。
提示:对于数组,使用fgets(string, sizeof(string), fp);
使您的代码更易于维护。
您可以使用 gets(string)
来获取多个单词,而不是使用 scanf()
。
参考 Link : www.keizerkong.com/c/c_string.html