gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 01:29:48 25 4
gpt4 key购买 nike

很难给问题起标题。

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com