我试过这段代码:
#include <stdio.h>
main()
{
char s[10][10];
s[10] = "Hi!";
printf("%s",s[1]);
return 0;
}
其中编译器给了我这个错误:
".......lvalue expected"
我刚开始学习C,所以我不知道如何做到这一点。
我试过这段代码:
#include <stdio.h>
main()
{
char s[10][10];
s[10] = "Hi!";
printf("%s",s[1]);
return 0;
}
其中编译器给了我这个错误:
".......lvalue expected"
我刚开始学习C,所以我不知道如何做到这一点。
您可以在定义时进行初始化,例如:
#include <stdio.h>
int main()
{
char s[10][10] = { "Hello", "Hi!", "Bonjour", "Hola", "", "", "", "", "", "" };
printf("%s\n", s[1]);
return 0;
}
或用于strcpy()
稍后分配字符串,例如
#include <stdio.h>
#include <string.h>
int main()
{
char s[10][10];
strcpy(s[1], "Hi!"); // s[1] = "Hi!"
printf("%s\n", s[1]);
return 0;
}
当您编写"Hi!"
代码时,它是一个变相的指针值(例如,编译器将替换为指向"Hi!"
内存中某处的地址,该地址包含四个字节“H”、“i”、“!”和“\0”)。对于您的变量s
,内存在声明时已经分配,并且是变量的组成部分,因此将指针分配给元素没有意义(类型不匹配)。
如果您改为声明s
为
char *s[10];
然后你就可以把你的代码写成
s[1] = "Hi!";
printf("%s",s[1]);