首页 > 解决方案 > 为什么用 %s 打印 char * 会打印“(null)”?

问题描述

这是我的代码:

char *x;
char *y;

printf("x:");
scanf("%s", x);

printf("y:");
scanf("%s", y);

printf("x: %s, y: %s\n", x, y);
return 0;

当我运行它时:

x:hello 
y:world
x: hello, y: (null)

为什么我得到 (null) 而不是“世界”?

感谢帮助

标签: c

解决方案


您永远不会为字符串分配空间。他们指向一些随机的垃圾值。用于malloc()为您的字符串动态分配空间或使用 achar[]进行自动存储。

这是一个自动分配空间的示例:

#include <stdio.h>
#include <stdlib.h>
int main() {
    char x[20]; // space for 19 characters and a null-terminator
    char y[20];

    printf("x:");
    scanf("%s", x);

    printf("y:");
    scanf("%s", y);
    printf("x: %s, y: %s\n", x, y);
    return 0;
}

推荐阅读