c - C中的数组String和普通数组有什么区别?
问题描述
#include<stdio.h>
int main()
{
char str[7];
scanf("%s",&str);
for(i=0; i<7; i++)
{
printf("%x(%d) : %c\n",&str[i], &str[i], str[i]);
}
printf("\n\n%x(%d) : %c or %s",&str, &str, str, str);
return 0;
}
由于带有字符串的数组,我对 C 数组的指针感到困惑。
实际上我想为单行输入保存每个字符。
它有效,但我发现了一些奇怪的东西......
主要问题是&str和&str[0]具有相同的地址值。
但是str具有带有 %s 的字符串值..
str[0]的字符值是 %c..
我将str与 %c 一起使用,然后它具有str地址的前两个数字。
数组中发生了什么..?
Stirng值的真实地址在哪里?
scanf("%s",&str)如何将 String 分配到每个 char 数组空间?
Input : 123456789
62fe40(6487616) : 1
62fe41(6487617) : 2
62fe42(6487618) : 3
62fe43(6487619) : 4
62fe44(6487620) : 5
62fe45(6487621) : 6
62fe46(6487622) : 7
62fe40(6487616) : @ 123456789
这是我的代码的结果窗口。
解决方案
你很困惑,因为字符串和数组是一回事。- 在内存中只有数据(以及指向该数据的指针)
当您为字符串分配整数或缓冲区时,您会保留一些内存。c 中的字符串被定义为以一个字节结尾的字节序列,值为 0 - 长度未知。使用固定长度数组,您可以使用已知的大小。
字符串的真正值是指向第一个字符的指针。
当您使用 %c 打印时,它需要一个字符 - str[0] 而不是指针 - 当您使用 %s 打印时,它需要一个指向字符序列的指针。
printf("\n\n%x(%d) : %c or %s",&str, &str, str[0], str);
推荐阅读
- javascript - 为子数组中的每个条目添加值
- ssl - 禁用不安全侦听端口时,Weblogic 10.3.6 托管服务器无法启动
- logic - 这个布尔表达式中是否有太多括号(方括号)
- testing - 使用 IRetryAnalyzer 作为监听器时未生成 Cucumber 报告
- python - 如何计算任何算法为给出最终结果所采取的步数?
- sql - Scala如何提取URL中的子字符串并为其创建一个新列?
- kubernetes - Kubernetes 的容器 CPU 请求值
- javascript - 如何对特殊的 JSON Discod.JS 进行排序
- firebase-hosting - Cloud Run + Firebase 托管区域重写问题
- javascript - Lighthouse 返回错误:内部:扩展结果为空