我试过这段代码:有没有办法将字符串分配给与其声明分开的字符数组?
#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]);
您可能会注意到,'S [10]'是出界,所以如果分配工作,你会创建一个[堆栈溢出](http://stackoverflow.com)。另外,你应该显式声明'main()'的返回类型 - 它是'int';你应该为你写的其他功能做同样的事情。 C99要求它;如果您使用的是较旧的编译器,请查看是否有警告选项可以提供帮助。对于GCC,使用'-std = c99 -Wall'是一个好的开始(或'-std = gnu99');使用'-Wextra'也可以避免一些其他的错误。请注意编译器警告(以及错误)。海湾合作委员会的“ - 错误”可能是有用的。 – 2013-02-26 23:58:35