首页 > 解决方案 > 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

这是我的代码的结果窗口。

标签: carraysstringpointersmemory

解决方案


你很困惑,因为字符串和数组是一回事。- 在内存中只有数据(以及指向该数据的指针)

当您为字符串分配整数或缓冲区时,您会保留一些内存。c 中的字符串被定义为以一个字节结尾的字节序列,值为 0 - 长度未知。使用固定长度数组,您可以使用已知的大小。

字符串的真正值是指向第一个字符的指针。

当您使用 %c 打印时,它需要一个字符 - str[0] 而不是指针 - 当您使用 %s 打印时,它需要一个指向字符序列的指针。

printf("\n\n%x(%d) : %c      or    %s",&str, &str, str[0], str);

推荐阅读