鱼C论坛

 找回密码
 立即注册
查看: 3748|回复: 14

字符数组的初始化问题

[复制链接]
发表于 2012-7-18 10:17:27 | 显示全部楼层 |阅读模式
1鱼币
为什么用下面的方法初始化就报错?
#include<stdio.h>
void main()
{
char a[128];
a[128] = {"l am linchuan!"};
printf("%s\n", a);
}

连编译都通不过。错误如下:
d:\program files\microsoft visual studio\myprojects\string\stringtest.cpp(6) : error C2059: syntax error : '{'
d:\program files\microsoft visual studio\myprojects\string\stringtest.cpp(6) : error C2143: syntax error : missing ';' before '{'
d:\program files\microsoft visual studio\myprojects\string\stringtest.cpp(6) : error C2143: syntax error : missing ';' before '}'
Error executing cl.exe.
stringtest.obj - 3 error(s), 0 warning(s)



用下面的程序是可以的,这个是书本上的例题。
#include<stdio.h>
void main()
{
char a[128] = {"l am linchuan!"};
  printf("%s\n", a);
}

小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-7-18 10:22:27 | 显示全部楼层
strcpy memcpy
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-18 10:32:53 | 显示全部楼层
  1. #include<stdio.h>

  2. void main()
  3. {
  4.         char a[128]= {"l am linchuan!"};                //果如你想给数组赋初值  只能  在定义数组的时候给初值
  5.                                                                                 //如果 你定义成 字符指针变量  就可以这样 比如
  6.         char *p;
  7.         p="I am linchuan!";                               

  8.         printf("%s\n",p);

  9.         printf("%s\n", a);
  10. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-18 10:36:38 | 显示全部楼层
主要是字符串不能直接Printf  必须通过一个循环逐个输出,如果使用指针就可以直接%s了。 懂?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-18 10:46:31 | 显示全部楼层
本帖最后由 我是师兄 于 2012-7-18 10:49 编辑

初始化是初始化  定义的时候 进行赋值 char a[128];a[128] = {"l am linchuan!"}; 你是在定义 结束之后 这个不是初始化 自然就不能这样做 你这样做表示的是 数组a下标为128的元素赋值为{"l am linchuan"} 一个是越界 另一个是不符合语法 在不是初始化的时候 ={}这个编译器解释不了 无法理解
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-18 10:48:24 | 显示全部楼层

你是想说 数组不能直接printf吧 :L 字符串特指结尾字符是'\0'的字符数组 所以是字符串就可以直接printf输出
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-18 13:06:04 | 显示全部楼层
空手套小白狼 发表于 2012-7-18 10:36
主要是字符串不能直接Printf  必须通过一个循环逐个输出,如果使用指针就可以直接%s了。 懂?

数组跟指针是一回事,,,,如何不能printf????????????????????

char  str[] = "Hello";

printf("%s",str);   去试下 看能不能。。。。。。。。。。。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-18 13:50:13 | 显示全部楼层
只能在定义的时候一下把整个数组初始化,这个设计是为了方便。char a[128];a[128] = {"l am linchuan!"};是错的
char a[128] = {"l am linchuan!"};是对的。
定义后不立即初始化就只能在以后像a[0]='I';a[1]='a'……这样赋值
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-18 14:01:54 | 显示全部楼层
万骨空 发表于 2012-7-18 13:50
只能在定义的时候一下把整个数组初始化,这个设计是为了方便。char a[128];a[128] = {"l am linchuan!"};是 ...


那倒也不是 可以借助各种操作内存 操作字符串的 函数实现对整个字符数组的数据修改
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-18 14:14:21 | 显示全部楼层
要区分下C语言里的=这个运算符:
情况1:
  1. #include<stdio.h>
  2. void main()
  3. {
  4. char a[128] = "l am linchuan!";
  5.   printf("%s\n", a);
  6. }

复制代码
这里的=不是赋值运算符,而是初始化的意思(因为之前a没有出现过)
情况2:
  1. #include<stdio.h>
  2. void main()
  3. {
  4. char a[128];
  5. a = "l am linchuan!";
  6. printf("%s\n", a);
  7. }
复制代码
这个代码是错的,这里的=是赋值运算符(因为之前a已经出现过了,所以不可能是初始化。初始化都是从无到有的)

仔细看书类似char a[128] = "l am linchuan!";这种代码是说数组的“初始化”方式的一种。初始化就是说必须要在定义数组的时候立即使用。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-7-18 14:38:07 | 显示全部楼层
谢谢各位大神的指点,我已经弄懂了!谢谢哈!!!{:1_1:}
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-18 18:21:58 | 显示全部楼层
a[128]只能存储一个字符,你给他付了那么多字符,你觉得会对么?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-18 23:02:56 | 显示全部楼层
这样不对,你相当于给一个字符变量赋值一个字符串。字符串赋值通常3种方法,1在定义时初始化;2使用scanf()函数;3使用strcpy()函数。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-19 01:11:54 | 显示全部楼层
本帖最后由 poj 于 2012-7-19 01:13 编辑
tym1988@qq.com 发表于 2012-7-18 18:21
a[128]只能存储一个字符,你给他付了那么多字符,你觉得会对么?


O(∩_∩)O哈哈~ ,不存在a[128],只到127
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-19 16:51:30 | 显示全部楼层
谭浩强的书里有解释。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-14 05:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表