| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1586 人关注过本帖
标题:想问个新手问题 - 关于字元运用
取消只看楼主 加入收藏
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
结帖率:97.66%
收藏
已结贴  问题点数:13 回复次数:12 
想问个新手问题 - 关于字元运用
一直不懂char A[256]和char *A之间有何不同 ?
我知道char A[256]是在内存开一个256空间的位置放资料,最多只能放256个字.
而char *A是由电脑(或是编译器)选定一个内存起始位置,存放未知长度的字元资料.
但是我不知道什么情况用哪种比较适当?有什么比较明确的标准吗?(假设字串长度不是问题)

原因之一是,最近常遇到原本申请的内存位址,其中存放的资料,之后却被之后申请的内存资料覆盖到
(理论上不可能发生,实际上常遇到),导致程式当掉,虽然可以解决,但是还是想知道原因.

所以我猜测是不是跟char A[256]和char *A之间有关系.

抱歉没什么分数可给了...
搜索更多相关主题的帖子: 资料 空间 编译器 
2015-01-19 14:30
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
所以是否有可能因为char *A长度未定,可能导致在程式运行时加入的资料覆盖到原本char A[256]内的资料?

不要選我當版主
2015-01-19 14:39
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
那char A[256]和char *A和char *A = new char[256]又有什么不同?

不要選我當版主
2015-01-19 14:45
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
又有
char *A = (char*)malloc(sizeof(char)*256);
我都快被搞混了

不要選我當版主
2015-01-19 14:47
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
先谢谢版主的回答,不过我是想问什么时候用哪种比较好,
除了它们是动态配置和静态配置的区别外,
还有什么是编程时选用的标准吗?

不要選我當版主
2015-01-19 14:53
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
个人经验是在副程式中使用阵列时,用char A[256]比较危险,常常崩溃。
改用char *A = char[256]就会变正常了。这也是不思不解很神奇的状况之一。

不要選我當版主
2015-01-19 16:03
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
不太懂?多个字符串不就是二维了吗?
char **A = new char*[256];
    for(int i=0;i<256;i++)
    *A = new char[256];

不要選我當版主
2015-01-19 16:16
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
以下是引用TonyDeng在2015-1-19 22:02:11的发言:

C的千年困擾,就是指針。


C的绝对优势也是指针,成也指针败也指针。快但是又危险。

不要選我當版主
2015-01-20 10:09
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
以下是引用longwu9t在2015-1-19 22:34:58的发言:

在使用指针char *A这种声明来定义字符串时
常用的有四种选择

char *A = "12345......................................." //直接给字符串赋值 同时确定了A的长度
char *A = NULL //以后用到时再分配内存空间 A长度未定
char *A = calloc(256 * sizeof(char)) //分配内存并初始化了字符串 A为空字符串 可以存储256个字符 使用完了要记得free
char *A = a //char a[256] = {0} //字符串a已经被初始化了 A指向了a

无论哪一种 只要使用了指针 都要注意不能越界


这些我都知道。
但上述有一个疑问,若副程式动态配置了内存空间,使用后理论上变量的生命周期应该是只在该副程式运行完毕前,
除非有做返回,不然除了要培养好习惯外,这样free不free有差吗?

不要選我當版主
2015-01-20 10:13
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
以下是引用TonyDeng在2015-1-19 21:40:30的发言:


是指針亂指造成的覆蓋。


但是通常我只需要把出问题的变量或阵列或结构,写声明的位置稍做改变,这问题就会解决了,这也是指针乱指所造成的吗?

不要選我當版主
2015-01-20 10:16
快速回复:想问个新手问题 - 关于字元运用
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017536 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved