c - 为什么用 %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) 而不是“世界”?
感谢帮助
解决方案
您永远不会为字符串分配空间。他们指向一些随机的垃圾值。用于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;
}
推荐阅读
- excel - 更新基于另一个表的表
- function - 数值积分函数
- python - Python读取具有可变数量值的最后一列的csv文件
- javascript - How to Prevent Elements from Wrapping with DOM
- c# - 如何检查是否通过 API 记录了 Google 分析指标?
- python-3.x - 从具有重复元素的列表中提取元素
- sql - SQL Server 地理空间数据类型转换
- python - 如何在 Python 上创建自定义 ID
- python - Football DataFrame - 从日期开始设置赛季
- flask - 如何使用我当前的目录结构正确配置 Flask 应用程序