user-0 提问: C 的一个小基础问题

回复:
user: user-1
content: 数组的大小必须在开始给定的吧

user: user-2
content: 不可以，你不要纠结这个，  这个是c语言标准规定的 只能初始化的时候可以那样写， 但你可以有好多其他方法来修改数组内容的  实际上你没初始化 也不代表数组里面就没有内容

user: user-3
content: 不可以！！！！！！书里说只能在初始化时用char a[] = "aaaaaaaaaaa";不可以在初始化后使用这种形式

user: user-4
content: 你这个代码应该是编译都无法通过的吧！数组像这样赋值只能在定义的时候，像这样： char a[] = "aaaaaaaaaaaaaaaaxxxxxxxxxxx";

user: user-5
content: 理解和讨论之前请先学会如何观察！  计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 多用小脑和手，少用大脑、眼睛和嘴，会更快地学会编程！ 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步Debug版对应汇编一行！ 单步Debug版对应汇编千行不如单步Release版对应汇编一行！ 不会单步Release版对应汇编？在你想单步Release版C/C++代码片断的前面临时加一句DebugBreak();重建所有，然后在IDE中运行。（一般人我不告诉他！）  单步类的实例“构造”或“复制”或“作为函数参数”或“作为函数返回值返回”或“参加各种运算”或“退出作用域”的语句对应的汇编代码几步后，就会来到该类的“构造函数”或“复制构造函数”或“运算符重载”或“析构函数”对应的C/C++源代码处。  VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 对VC来说，所谓‘调试时’就是编译连接通过以后，按F10或F11键单步执行一步以后的时候，或者在某行按F9设了断点后按F5执行停在该断点处的时候。  http://edu.csdn.net/course/detail/2344 C语言指针与汇编内存地址-一.代码要素

user: user-6
content: 不可以的哦亲..看看数组的使用..放括号不写数字就得赴初值哦

user: user-7
content: c语言没有字符串这种类型，是通过字符数组实现字符串的， 赋值要么对数组一位一位赋值，要么函数实现

user: user-8
content: 首先，char a[]; 这是一个不合理的定义。如果想定义数组的话，在没有初始化语句的话，需要指定数组大小，这涉及到变量a将被分配多少栈上的内存空间。第二个问题“aaaaafa”这样写的话，其实表明这个字符串是在静态存储区的。也有自己的内存首地址。如果想把这个内容从静态区报到栈上。那么就做一次memcpy操作就好了。 char a[strlen(“aaaaafa”)+1] ={0}; memcpy(a,”aaaaafa”,strlen(“aaaaafa”)); printf(“%s”,a);   如果只是想用一个内容为“aaaaafa”的字符串。就直接定义一个字符变量，去存储这个静态区字符的首地址 char *a =“aaaaafa”;  就好了！

user: user-9
content: 可以在后面再赋值，但定义的时候需要先指定数组的大小，同时赋值时不能写成： a[]= "aaaaaafa";，要用strcpy(a,"aaaaaafa");，或者一个元素一个元素的指定

user: user-10
content: 不可以，  引用 3 楼 faihung 的回复:[quote=引用 1 楼 hdt 的回复:] #include<stdio.h> main() {         char a[];         strcpy(a, "aaaaaafa");         printf("%s\n", a);         return 0; }memcpy也是可以的，哈哈。虽然这个是内存拷贝[/quote] 有没有考虑a的长度，这样操作不会越界吗？ char a[]和char *a（基本上）没什么区别。其实就是定义了一个野指针

user: user-10
content: C语言可以借助字符串操作函数实现字符串的拷贝，但是前提得给a申请足够存放的空间，否则会导致段错误。

user: user-11
content: 引用 2 楼 hdt 的回复:sorry 有些问题   [quote=引用 1 楼 hdt 的回复:] #include<stdio.h> main() {         char a[20];//copy paster 没注意         strcpy(a, "aaaaaafa");         printf("%s\n", a);         return 0; }[/quote] 这样可以的

user: user-12
content: 引用 5 楼 cfjtaishan 的回复:不可以，  [quote=引用 3 楼 faihung 的回复:] [quote=引用 1 楼 hdt 的回复:] #include<stdio.h> main() {         char a[];         strcpy(a, "aaaaaafa");         printf("%s\n", a);         return 0; }memcpy也是可以的，哈哈。虽然这个是内存拷贝[/quote] 有没有考虑a的长度，这样操作不会越界吗？ char a[]和char *a（基本上）没什么区别。其实就是定义了一个野指针[/quote]嗯，有道理。

user: user-13
content: 引用 3 楼 faihung 的回复:[quote=引用 1 楼 hdt 的回复:] #include<stdio.h> main() {         char a[];         strcpy(a, "aaaaaafa");         printf("%s\n", a);         return 0; }memcpy也是可以的，哈哈。虽然这个是内存拷贝[/quote] 嗯 memcpy 要确定长度!

user: user-12
content: 引用 1 楼 hdt 的回复:#include<stdio.h> main() {         char a[];         strcpy(a, "aaaaaafa");         printf("%s\n", a);         return 0; }memcpy也是可以的，哈哈。虽然这个是内存拷贝

user: user-13
content: #include<stdio.h> main() {         char a[];         strcpy(a, "aaaaaafa");         printf("%s\n", a);         return 0; }

user: user-13
content: sorry 有些问题   引用 1 楼 hdt 的回复:#include<stdio.h> main() {         char a[20];//copy paster 没注意         strcpy(a, "aaaaaafa");         printf("%s\n", a);         return 0; }