C 的一个小基础问题

H_MAXLLL 2018-01-28 07:56:44

#include<stdio.h>
main()
{
char a[];
a[]= "aaaaaafa";
printf("%s\n", a);
return 0;
}


请教一个问题,c语言中,定义一个字符串,一定要char a []="aaaaaafa" ,这样的格式吗,是否可以先定义a[],然后再赋值~~
...全文
850 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
程序员菜鸟 2018-02-08
  • 打赏
  • 举报
回复
数组的大小必须在开始给定的吧
BAO BAO 2018-02-08
  • 打赏
  • 举报
回复
不可以,你不要纠结这个, 这个是c语言标准规定的 只能初始化的时候可以那样写, 但你可以有好多其他方法来修改数组内容的 实际上你没初始化 也不代表数组里面就没有内容
helloxkcd 2018-02-08
  • 打赏
  • 举报
回复
不可以!!!!!!书里说只能在初始化时用char a[] = "aaaaaaaaaaa";不可以在初始化后使用这种形式
PiPiDad 2018-02-07
  • 打赏
  • 举报
回复
你这个代码应该是编译都无法通过的吧!数组像这样赋值只能在定义的时候,像这样: char a[] = "aaaaaaaaaaaaaaaaxxxxxxxxxxx";
赵4老师 2018-02-06
  • 打赏
  • 举报
回复
理解讨论之前请先学会如何观察! 计算机组成原理→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语言指针与汇编内存地址-一.代码要素
qq_41050020 2018-02-05
  • 打赏
  • 举报
回复
不可以的哦亲..看看数组的使用..放括号不写数字就得赴初值哦
destory27 2018-02-01
  • 打赏
  • 举报
回复
c语言没有字符串这种类型,是通过字符数组实现字符串的, 赋值要么对数组一位一位赋值,要么函数实现
雷霆小屁熊 2018-02-01
  • 打赏
  • 举报
回复
首先,char a[]; 这是一个不合理的定义。如果想定义数组的话,在没有初始化语句的话,需要指定数组大小,这涉及到变量a将被分配多少栈上的内存空间。第二个问题“aaaaafa”这样写的话,其实表明这个字符串是在静态存储区的。也有自己的内存首地址。如果想把这个内容从静态区报到栈上。那么就做一次memcpy操作就好了。 char a[strlen(“aaaaafa”)+1] ={0}; memcpy(a,”aaaaafa”,strlen(“aaaaafa”)); printf(“%s”,a); 如果只是想用一个内容为“aaaaafa”的字符串。就直接定义一个字符变量,去存储这个静态区字符的首地址 char *a =“aaaaafa”; 就好了!
paschen 2018-01-29
  • 打赏
  • 举报
回复
可以在后面再赋值,但定义的时候需要先指定数组的大小,同时赋值时不能写成: a[]= "aaaaaafa";,要用strcpy(a,"aaaaaafa");,或者一个元素一个元素的指定
自信男孩 2018-01-29
  • 打赏
  • 举报
回复
不可以,
引用 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(基本上)没什么区别。其实就是定义了一个野指针
自信男孩 2018-01-29
  • 打赏
  • 举报
回复
C语言可以借助字符串操作函数实现字符串的拷贝,但是前提得给a申请足够存放的空间,否则会导致段错误。
AlbertS 2018-01-29
  • 打赏
  • 举报
回复
引用 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] 这样可以的
faihung 2018-01-29
  • 打赏
  • 举报
回复
引用 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]嗯,有道理。
真相重于对错 2018-01-28
  • 打赏
  • 举报
回复
引用 3 楼 faihung 的回复:
[quote=引用 1 楼 hdt 的回复:]
#include<stdio.h>
main()
{
        char a[];
        strcpy(a, "aaaaaafa");
        printf("%s\n", a);
        return 0;
}
memcpy也是可以的,哈哈。虽然这个是内存拷贝[/quote] 嗯 memcpy 要确定长度!
faihung 2018-01-28
  • 打赏
  • 举报
回复
引用 1 楼 hdt 的回复:
#include<stdio.h>
main()
{
        char a[];
        strcpy(a, "aaaaaafa");
        printf("%s\n", a);
        return 0;
}
memcpy也是可以的,哈哈。虽然这个是内存拷贝
真相重于对错 2018-01-28
  • 打赏
  • 举报
回复
#include<stdio.h>
main()
{
        char a[];
        strcpy(a, "aaaaaafa");
        printf("%s\n", a);
        return 0;
}
真相重于对错 2018-01-28
  • 打赏
  • 举报
回复
sorry 有些问题
引用 1 楼 hdt 的回复:
#include<stdio.h>
main()
{
        char a[20];//copy paster 没注意
        strcpy(a, "aaaaaafa");
        printf("%s\n", a);
        return 0;
}

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧