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"第一个字符的指针变量,里面只能存地址。