一个C++中有关char*的小问题

来源:百度知道 编辑:UC知道 时间:2024/06/17 22:27:48
我现在有一个char *s1,它是我读入的一个.bmp的文件名,比如"aaa.bmp",然后我想创建一个char *s2,使得s2的内容是把s1中的.bmp改成.jpg,比如把"aaa.bmp"改成"aaa.jpg",然后把这2个char *作为函数形参代入函数进行计算。我现在不知道怎么写才能实现,因为我如果这样写的话:

char *s2=s1;
int len=strlen(s2);
s2[len-3]='b'; s2[len-2]='m'; s2[len-1]='p';

会使得s1、s2同时改变,而我需要只让s2改变、s1不变,该怎么写才能实现?(那个函数的两个形参都必须是char *)
我的困惑在于不知道如何把char *所指向的字符串提取出来并进行更改,不知道有没有什么方法可以做到。

1楼的解答我试过是不行的,因为这样做只会把s2字符串的第一个字符赋给s1。

“而我需要只让s2改变、s1不变”===〉你需要两个字符串,不是两个指针指向同一个字符串空间。char *s2=s1;就是让s2和s1指向同一串,改一个就改了另一个。

既然喜欢c的str系列函数,可以用strcpy()复制s1:(注意c里没有提供其它的字符串拷贝操作符,直接=作用的不是串而是一个字符或字符指针。如果不用这个函数,就只好自己写循环逐字符拷贝)
char *s2;
strcpy(s2, s1);
这样s2和s1就没关系了。

如果用c++的string类型,就可以直接用赋值拷贝s1,也可以用构造函数拷贝。

char* s2;
*s2=*s1;

指针,指针的赋值,只不过是使他们的指向是一样的,同一块内存,改变了之后,也就是指向的内容发生了改变,如果想要复制,那么也就是要另外开辟一块内存块了

向楼上说的,strcpy就是个办法,呵呵

函数strncpy(str1,str2,n); /*将str2的前n个字符复制到str1中去*/
所以你可以这样:
strncpy(s2,s1,strlen(s1)-strlen(".bmp"));
strcat(s2,".jpg");
但是这样你的s2指向的内容必须是能修改的,所以不能声明为 char* s2;而应该声明为数组形式:char s2[N]={0}; /*N是一个足够你使用的正整数*/
/*******/
char *str;声明的指针变量可以改变指向字符串的内容,但是不能改变指向的字符串的大小。

/*****************/
如果想把char *所指向的字符串提取出来并进行更改,只能再加设一个临时变量 char s3[N];