C语言:为什么这段代码一运行就出错?char *存储字符串有问题吗?

#include<stdio.h>#include <string.h>int main(void){ char *c = "OPQ"; char *d = "rst"; strcat(c,d); printf("字符串的值是:%s\n",c); return 0;}

第1个回答  2013-11-03

char *c = "OPQ";这样的写法是指指针c是指向"OPQ"这个字符串常量的(注意是常量)

strcat(c,d);这句又试图改变c指向的字符串(增加d指向的内容),这和c指向的是字符串常量是矛盾的,所以不允许.

修改的的话,只要改变c就行:

 char c[100] = "OPQ";//这样的定义表示c是一个字符数组,并且数组初始化内容为"OPQ",那么它就是一个变量,而不是常量,下面改变值就能成功.
 char *d = "rst";
 strcat(c,d);
  printf("字符串的值是:%s\n",c);
 return 0;

第2个回答  2013-11-03
char *存储字符串有问题吗?
楼主这个问题问错了
指针本身就不存储字符,它只是指向存字符的地址
而strcat函数是把第二个字符串赋值第一个字符串后面,但是第一个字符所在的位置你没有开辟空间,只是用指针指向了第一个字符串,不知道后面的位置有没有被占用,所以你运行的时候就错了。一般用char c[]或者string来存字符,然后用strcat函数。本回答被提问者采纳
第3个回答  2013-11-03
你好,c跟d都是指向字符串常量,为常量指针,不允许进行赋值等一系列操作。如果要操作,请对指针申请空间或者定义字符串变量(即字符数组,且数组应该有足够的容量来支持strcat)。
例子:
char *c = "adf";
char *d = "afsad";
char ca[20] = "";//或者可以写成 char *ca = (char *)malloc(20);在这里注意加头文件<malloc.h>
strcpy(ca,c);
strcat(ca,d);
printf("字符串是:\n",ca);
第4个回答  2013-11-03
char* 只是申请一个指针,而没有申请相应的用于储存字符串的内存空间
第5个回答  2013-11-03
2个指针指向的都是字符串字面量,修改字符串字面量的行为是未定义的
相似回答