如何替换char中的char *

总新手在这里。 我试图替换char *中的字符,但我的程序给出错误

#include  int main(int argc, char **argv) { char *mystring ="love is alweys better yoe"; int count = 1; for (count ; count  0x41) && (mystring[count+1] < 0x7A))) { mystring[count] = 0x45; //here occur the freezing printf ("%c\n", mystring[count]); //break; }; }; printf("%s\n",mystring); return 0; } 

 char *mystring ="love is alweys better yoe" 

使mystring只读

您需要先将字符串复制到缓冲区中,然后才能进行更改

例如

 char mystring[128]; strcpy( mystring , "love is alweys better yoe" ); 

堆栈分配

 char *mystring ="love is alweys better yoe"; 

这会在只读内存中创建一个字符串文字,您不能随后写入它来更改字符。

你应该像这样初始化你的字符串:

 char mystring[] ="love is alweys better yoe"; 

这将分配一个大小为26字节的字符数组 – 每个字符1个字节,以空字符\0结尾。

请注意,如果您尝试写入缓冲区的末尾(即超出\0字符),则可能会入侵为程序中的其他数据分配的内存,这可能会产生不良后果。

堆分配

前面的示例在堆栈上分配内存,并且在当前范围的末尾(通常是您所在的函数)将被释放。 如果您希望内存在函数调用结束后持续存在,则需要在堆上分配它,如下所示:

 int bufferSize = 26; char* mystring = malloc(bufferSize); strncpy(mystring, "love is alweys better yoe", bufferSize); 

当你完成它时,你需要记住free这个记忆:

 free(mystring); 

如果从调用函数free ,则需要将char*指针返回给调用者,因此它知道要free哪个内存位置。 如果不free此内存,程序将泄漏内存。

增加字符串的大小

如果在为其分配内存后需要重新调整字符串大小,可以使用realloc

 char* mybiggerString = realloc(mystring, bufferSize + 10); strncpy(mystring, "I can fit more in this string now!", bufferSize); 

“在char *中”毫无意义。 你不能改变指针中的“东西”,因为指针中没有任何东西 – 它不包含东西。 它指向事物。 这就是为什么它被称为“指针”,而不是“容器”。

当你写char *mystring ="love is alweys better yoe"; ,你让mystring指向一个字符串文字 。 这是一块专门用于保存文本的内存。 它位于一个特殊的记忆区域, 可能无法改变 。 (文本存储在.exe文件中;在大多数实现中,操作系统将.exe文件加载到内存中,然后将指针指向加载的.exe的那部分。您可能不会更改此内存,因为操作系统禁止它 – 基本上,使创建病毒变得更加困难。)

解决方案:使用可修改的内存块。 这样写: char mystring[] = "love is alweys better yoe"; 。 字符串文字仍然存在于程序中,但这会指示程序创建一个缓冲区(在内存中可以更改)并将文字复制到缓冲区中。 此缓冲区的长度与文字的长度完全相同,因此您仍然可能无法附加到字符串 – 仅更改现有字符,或将其剪切掉(通过在中间的某处写入空字节)。