这个问题很难定名。基本上我有一个数组,它有自己的结构。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);}这段代码将打印出我在扫描过程中写的任何东西。不过,这对int main的小改动; int main(){ arrayVideo[0].title[90] = ("Hello"); printf("%s", arrayVideo[0].title);}什么也没发现。控制台只输出执行时间和正常业务。不输出“Hello” 最佳答案 这个问题实际上源于指针对字符串的作用的混淆。是一个字符数组,它存储90个cc s。cc是指向该数组的第一个元素的指针,而cc是一个指向数组结尾的指针(因为数组索引从0开始,而cc是最后一个元素)。所以,如果我们把这一行的情况分解开来: arrayVideo[0].title[90] = ("Hello");左侧是指针类型,它指向char title[90]中的第一个元素,这是一个结构,然后在该结构中指向超过char的第一个元素的90个元素的字符,注意这是91s元素。右边是title类型的字符串文本。目前,这段代码只是将一个指针指派给一个超过数组末尾的指针,以指向title[90]字符串文本开头的地址。它不会像您希望的那样将字符串的内容复制到数据结构中。我有点惊讶,你没有从你的编译器得到警告,当你编译这个时,试着编译所有的警告启用。要正确复制字符串的内容,您需要使用title[89]这样:strcpy(arrayVideo[0].title,"hello")这里arrayVideo的目的地是title数组的开始,而源则来自const char*字符串文本"hello"。关于c - 为什么scanf在直接输入字符串时将字符串放入char数组不起作用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24468285/