首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

c这样是不是有点变态哦,该如何处理

2012-03-07 
c这样是不是有点变态哦char *sd12345那是不是意味这 :const char *sd12345sd指向的这个字符串是常

c这样是不是有点变态哦
char *sd="12345";

那是不是意味这 :const char *sd="12345";

sd指向的这个字符串是常量,那我如何构造动态的字符串呢?

strcat(sd,"123");这样就不能用了

那我用strcat 是不是必须用 char sd[]这样啊 晕~

[解决办法]
不要char *sd="12345"; 
应该const char *sd="12345"; 
至于strcat你看能不能编译过去就好.
[解决办法]
不好意思,上面有误:
char *sd; 
sd = (char*)malloc(100); 
memset(sd, 0, 100); 
strcpy(sd, "12345"); 
strcat(sd, "123");
[解决办法]
strcat(sd,"123");
sd是一个指针,指向一个存储字符串的区域,且不能是常量

可以是char buf[1024];
char* p = buf;
strcat(p,"123");
[解决办法]
一个方法就是如你自己所说的
char sd[];
strcat(sd,123);

另一个方法你可以这样
char sd[]="12345";
char *p = sd;
strcat(p,123);

本质是一样的!
[解决办法]
char *sd="12345"; sd指向的是系统分配的一段静态内存,所以在后面strcat(sd,"123")是错误的,如果要在后面增加字符,需要重新分配内存和改变指针指向,
sd = new char[1024];//要求足够大,
strcpy(sd,"12345");
strcat(sd,"123");//用完后删除delete sd;
但这样设计是不好的,最好用动态内存分配!
[解决办法]
sd指向的是系统分配的一段静态内存,不能给他赋值。
可以把sd分配动态内存区malloc分配(用完一定要free);也可以分配stack空间,用 char[128]分配。



[解决办法]
我看很多人把C语言和C++都搞混了,竟然看到new.还有delete.
[解决办法]


楼主问得有点糊涂,首先char *sd="12345";的意思是在内存中开辟一个字符数组存入"12345",然后用sd指向这个字符数组的首地址,也就是说sd是一个指向"12345"第一个字符的指针变量,里面只能存地址。

热点排行
Bad Request.