c - 为什么scanf将字符串放入char数组,直接输入却不行?

标签 c scanf

很难给问题起标题。

本质上我有一个数组,它有自己的结构。

typedef struct Video
{
    unsigned id;
    char title[90];
    char producer[60];
}Video;

Video arrayVideo[7];

int main()
{
    scanf("%s", arrayVideo[0].title);
    printf("%s", arrayVideo[0].title);
}

此代码将打印出我在 scanf 过程中写入的任何内容。

然而,对 int main 的这个小改动;

 int main()
{
    arrayVideo[0].title[90] = ("Hello");
    printf("%s", arrayVideo[0].title);
}

什么也没有出现。控制台只是输出执行时间和正常业务。不输出“你好”

最佳答案

这个问题实际上源于对指针对字符串的作用的混淆。 char title[90]是一个字符数组,存储了90个chartitle 是指向该数组第一个元素的指针,title[90] 是指向数组末尾元素的指针(因为数组索引从 0 开始,title[89]是最后一个元素)

所以如果我们分解这一行中发生的事情:

    arrayVideo[0].title[90] = ("Hello");

左边是一个指针类型,它指向 arrayVideo 中的第一个元素,它是一个结构,然后在该结构中指向 第一个元素后 90 个元素的字符>title,注意这是91s元素。右侧是 const char* 类型的字符串文字。目前这段代码只是分配一个指针一个超过你的数组的末尾来指向“hello”字符串文字的开始地址。它不会像您希望的那样将字符串的内容复制到您的数据结构中。我有点惊讶你在编译这个时没有从你的编译器那里得到警告,尝试在启用所有警告的情况下编译。

要真正正确地复制字符串的内容,您需要使用 strcpy像这样:

strcpy(arrayVideo[0].title,"hello")

此处 strcpy 的目标是 title 数组的开始,源来自 const char* 字符串文字 "hello".

关于c - 为什么scanf将字符串放入char数组,直接输入却不行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24468285/

相关文章:

C - 剪刀石头布计分板问题

c - 为什么我在这个 STACK 程序中得到这个数字而不是值?

c - 使用 sscanf 和 fgets 读取多行文本文件

c - scanf 接受一个带空格的字符串,然后接受一个 char

C fscanf 从文件错误中读取数据

c - 用 C 更快地读取文件

CMakeLists.txt 如何包含条件预处理器

C:如何将2个32位无符号整数的结果保存为有符号整数

C: 为什么隐式常量转换会溢出[-Woverflow]?

c++ - sscanf(s, "%u", &v) 匹配有符号整数