是什么导致我的印刷语句产生不同的结果?

时间:2016-06-03 07:52:20

标签: c string

我是一个学习用C语言编程的新手,我目前正致力于创建一个程序,该程序从用户那里获取名称输入,然后将该名称重新打印到屏幕上。当程序在else if块中打印出名称时,我得到的是$"。我想知道它为什么会发生以及我如何纠正这个问题。我的代码如下:

#include <stdio.h>
#include <stdlib.h>
int main() {
    char * ans; // yes/no answer
    char * name; //name variable

    printf("Welcome to the program. Would you like to begin? (y/n)\n");
    scanf("%s", ans);

    if (strcmp(ans, "y") != 0) {
        printf("Have a good day!\n");
        return 0;
    }
    else if (strcmp(ans, "y") == 0)
        printf(" %s\n", ans);

    printf("Okay, input your name:\n");
    scanf("%s", name);

    printf(" %s", name);// I get $ " rather than the name.

    return 0;
}

1 个答案:

答案 0 :(得分:2)

您正在使用scanf()来读取用户的字符,但尚未分配任何内存来保存这些字符。这给出了未定义的行为,因为&#34;任何事情都可能发生&#34;当你违反这样的规则时。

将那些未初始化的指针改为数组:

char ans[128];
char name[128];

这为每个字符串提供了128个字符的空格(其中一个将由终结符使用)。