【问题标题】:Concatenate strings from char input连接来自 char 输入的字符串
【发布时间】:2017-10-28 14:42:33
【问题描述】:

我想从字符输入连接strings

我希望用户逐个字符地键入直到EOF,然后我想发送我的string

所以目前,如果我输入 char 为例如 'r' 点击 enter 并按 Control + D(我正在使用 ubuntu)这就是我在屏幕上看到的:

r
r
�

这是我的程序:

#include <stdio.h>
#include <string.h>

int main()
{
    char c = 0;
    char str[127] = {'\0'};
    while (c != EOF)
    {
         c = getchar();
         strncat(str, &c, 1);
    }

     printf("%s\n", str);

    return 1;
}

【问题讨论】:

  • EOF 不是字符。 getchar 返回 int 是有原因的。
  • 如果检测到换行符'\n'EOF,代码会更加用户友好。您应该构建一个以'\0' 结尾的字符串以传递给strncat

标签: c string initialization eof c-strings


【解决方案1】:

这里有两个问题:

  • getchar() 返回int。所以c 也应该是int,否则它可能无法存储EOF

  • 在第一次迭代中,代码尝试连接到未初始化的str。这样做会调用未定义的行为。

【讨论】:

  • 那么我需要在这里改变什么? (除了 char c 到 int c)
  • @user979033: "... 到未初始化的str"
  • 有几种方法可以在 C 中初始化字符串...Google 会提供帮助 :)
  • @aschepler -- 当然有可能不适合char 的整数值(可能是EOF 的值),我的评论本来可以更仔细地措辞在这方面;但我的评论是针对char 能够保持EOF 的值的观点。 Alk 在“可能无法存储EOF”的谨慎措辞中是正确的。 EOF 的值可能适合也可能不适合 charchar 可能也可能不能接受负值,但基本执行字符集的任何成员都不能有负值。跨度>
猜你喜欢
  • 2013-02-05
  • 1970-01-01
  • 1970-01-01
  • 2012-04-12
  • 1970-01-01
  • 2015-10-27
  • 1970-01-01
  • 2011-02-18
相关资源
最近更新 更多