很难给问题起标题。
本质上我有一个数组,它有自己的结构。
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个char
。 title
是指向该数组第一个元素的指针,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/