c - 如何将字符串输入到字符指针数组中?
问题描述
我的问题是如何将字符串输入到字符指针数组中?内存是在这里动态分配的还是什么?实际上存储在数组' name
'中的是什么?
char *name[20];
printf("Enter a string:");
scanf("%s",name);
printf("%s",name);
此代码工作正常。它打印我输入的字符串。怎么可能这样char *name[20]
对待char name[20]
?
解决方案
scanf
并printf
期望一个字符数组,但你给了它一个指针数组。但是,他们无法区分,因为它们是可变的。这会导致未定义的行为,因此一切皆有可能。
这里可能发生的事情是scanf
简单地将字符写入指针数组的内存printf
并将数据视为字符,因为这两个函数都不知道您给它的内存块应该存储指针而不是字符。打印出第二个元素可能会给您第五个字符,因为您的系统有四个字节指针,所以第二个指针元素从第五个字节开始,因此是第五个字符。
同样,您的代码表现出未定义的行为,因此上一段只是推测。标准没有保证这一切,你永远不应该依赖它。
推荐阅读
- bash - 如何用unix中文件的修改日期减去今天的日期?
- javascript - 组合数组对象的可观察对象
- python-3.x - Keras 错误 - 预期 activation_1 的形状为 (2622,) 但数组的形状为 (1,)
- java - Socket InputStream.read(byte[],int,int) 总是返回第三个参数值
- fluentvalidation - FluentValidation:仅当字段不为空时才执行 .Must
- php - 卷曲返回'来自服务器的空回复'
- c++ - 如何在没有参数的情况下从 for_each() 调用函数
- performance - 这是否需要在 Unity android 游戏中设置帧速率?
- python - 使用 pandas 删除重复项但不能正确删除重复项
- node.js - NodeJS 使请求同步