c - 从标准输入读取输入

标签 c string

我想要一个终端运行一个进程,并且在运行时我想通过同一终端向该进程发送命令。该进程在 while 循环中运行并接受多个命令,其中一些命令具有可选参数。例如,发送“打印 ID”,其中 ID 是可选的。目前我有这个

char *command = malloc(100);
while(1) {
 fgets(command , 100 , stdin);
 if( strcmp(command, "PRINT") == 0 ) {
 /*do something*/

但是strcmp总是失败,我不知道C如何提取可选参数并在函数中使用它。

最佳答案

@BLUEPIXY 是正确的。

根据fgets的文档:

从给定文件流中读取最多 count - 1 个字符并将它们存储在 str 指向的字符数组中。如果发生文件结尾或找到换行符,则解析停止,在这种情况下 str 将包含该换行符。如果没有发生错误,则在写入 str 的最后一个字符之后紧接着的位置写入一个空字符。

因此,您要查找的是 strcmp(command, "PRINT\n") == 0

您可以通过使用 fscanf 来避免这种情况:

fscanf(stdin, " %100[^\n]", command);
if(strcmp(command, "PRINT") == 0) {
    /* do something */
}

关于c - 从标准输入读取输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44240738/

相关文章:

c - 不同数据类型的内存对齐是否不同

c - 为什么在所有函数(main() 除外)之前都有一个 'static' 关键字?

java - 为什么 string.length() 是一个方法,而 int[].length 是一个属性?

c++ - 有没有更好的方法来排列字符串?

string - 有效地计算一个字符串和一大组其他字符串之间的编辑距离?

c - 有什么解决方案可以在原子上下文中在用户和内核之间共享数据吗?

C 程序 - 取消引用指针

linux - 接受任何参数的 Shell 脚本

java - Java 中与字符串相关的问题 : why isn't my level promotion/downgrade updated correctly?

将字符指针转换为字符串指针,删除重复项