在C中组合字符串和用户输入

时间:2016-03-03 21:48:47

标签: c

我是C的新手,我想知道如何将字符串与用户的输入结合起来。这就是我所拥有的,但我不确定用户输入是否正确。

#include <stdio.h>
int main ()
{
    int a;
    int input = scanf("%d", &a);
    printf ("Hello, \n" + input);
}

但是这只是要求输入,然后打印到终端“你好”。有谁知道如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

首先,scanf函数不返回匹配的值,而是匹配的值的数量。输入值本身将写入第二个参数指向的内存位置,在您的情况下,变量a。有关详细信息,请参阅manual page for scanf(或man 3p scanf)。

其次,更正确的printf语句将是这样的:

printf ("Hello, %d\n", a);

格式字符串中的%d替换为整数a,例如如果a等于42,则该语句与printf("Hello, 42\n");具有相同的效果。 %d说明符表示相应的参数是整数。有关详细信息,请参阅manual page for printf(或man 3p fprintf)。

当您使用"Hello, \n"运算符直接添加C样式字符串(例如a)和整数(例如+)时,不会发生整数到字符串转换。相反,作为第一个操作数的字符串文字被视为char const *指针,第二个操作数(整数a)被添加到该指针。在这种情况下,格式字符串会指向一些奇怪的,这可能会导致崩溃或安全​​漏洞。例如,printf("Hello, World!\n" + 7);相当于printf("World!\n");,只输出字符串&#34; World!\ n&#34;。

但是,"Hello, World!\n" + someLargeInteger将指向生成的二进制文件中的某些其他数据,甚至是二进制文件之外的数据。这将导致未定义的行为并可能导致程序崩溃。另请注意,int类型的值可能为负值。

答案 1 :(得分:1)

在C中,scanf返回匹配的成功项目的数量。

输入的内容位于a

#include <stdio.h>
int main ()
{
    int a;
    scanf("%d", &a);

    printf ("Hello %d\n", a);
}

答案 2 :(得分:1)

&d读取数字而不是字符。你必须用%s读取字符,因为你想要像你说的那样组合一个字符串,而scanf不需要返回整数。

char str[200];
scanf("%s", str);
printf("Hello, %s", str);