【问题标题】:How do I parse strings with the newline character in C?如何在 C 中使用换行符解析字符串?
【发布时间】:2013-02-27 15:10:41
【问题描述】:

我正在编写一个 shell,我正在使用 getline() 和键盘的标准输入来接收命令。我在标记输入时遇到了麻烦。我尝试在 strtok() 函数中使用 \n 作为分隔符,但它似乎不起作用。

例如,我包含了一个 if 语句来检查用户是否键入了“exit”,在这种情况下它将终止程序。它没有终止。

这是我正在使用的代码:

void main() {
int ShInUse = 1;
char *UserCommand;   // This holds the input
int combytes = 100;
UserCommand = (char *) malloc (combytes);
char *tok;

while (ShInUse == 1) {
   printf("GASh: ");   // print prompt
   getline(&UserCommand, &combytes, stdin);
   tok = strtok(UserCommand, "\n");
   printf("%s\n", tok);

   if(tok == "exit") {
      ShInUse = 0;
      printf("Exiting.\n");
      exit(0);
   }
}

【问题讨论】:

  • 您是否尝试过使用调试器查看正在读取的内容?如果没有,您应该这样做。

标签: c token tokenize strtok


【解决方案1】:
if (tok == "exit")

tokexit 是指针,因此您正在比较两个指针。这会导致未定义的行为,因为它们不属于同一个聚合。

这不是比较字符串的方法。宁可使用strcmp

 if (strcmp (tok, "exit") == 0)

【讨论】:

    【解决方案2】:

    正如@Kirilenko 所说,您无法使用 == 运算符比较字符串。

    但事实并非如此。如果您使用getline(),则无论如何都不需要将输入拆分为行,因为 getline() 仅读取一行。如果您确实想将输入拆分为其他分隔符,则可以在循环中调用 strtok() 直到它返回 NULL。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多