在 C++ 中更改字符串或字符指针的某些字符
Posted
技术标签:
【中文标题】在 C++ 中更改字符串或字符指针的某些字符【英文标题】:Changing certain character of a string or character pointer in C++ 【发布时间】:2014-09-04 21:01:01 【问题描述】:我会非常感激并一直感激能帮助我的他/她。在 C/C++ 中类似。
int string_length;
char *str;
str="Muhammad ashikuzzaman";
printf("%c",str[1]);
str[1]='o'; // Here an Unhandled Exception occurred
printf("%c",str[1]);
在第 6 行或第 5 行发生了未处理的异常,并且未显示输出。我需要更改字符指针的任何特定字符。请帮帮我。
【问题讨论】:
打开编译器警告。他们都是。在您阅读完所有内容之前不要回来。"Muhammad ashikuzzaman"
是一个常量字符串;分配内存并将此字符串复制到其中,然后根据需要进行修改。
谢谢@abiessu。我已经分配了动态内存并得到了解决方案。
感谢@KerrekSB 我从警告和错误列表中看到它与字符串的内存和不变性有关。
【参考方案1】:
字符串文字在 C 和 C++ 中是不可变的。也就是说,任何修改它们的尝试都会导致程序的未定义行为。而不是这些陈述
char *str;
str="Muhammad ashikuzzaman";
用这个
char str[] = "Muhammad ashikuzzaman";
至于指针 str 的定义和初始化,那么 C++ 中的正确代码将如下所示
const char *str;
str="Muhammad ashikuzzaman";
C++ 中的字符串字面量具有常量字符数组的类型。
【讨论】:
感谢来自莫斯科的@Vlad 我使用了动态内存分配并得到了准确的解决方案..【参考方案2】:int string_length;
char *str,*str2,ch;
str="Muhammad ashikuzzaman";
str2=str;
string_length=strlen(str);
str=(char*)malloc(string_length*sizeof(char));
for(int i=0;i<string_length;i++)
if(i==1)
*(str+i)='o';
else *(str+i)=str2[i];
for(int i=0;i<string_length;i++)
printf("%c",*(str+i));
【讨论】:
这不是很好的示例代码。很多不必要的移动和变量覆盖。最后一行最好写成printf ("%s", str);
,但即使str[i]
也会(稍微)好于*(str+i)
。 (另外,您忘记为终止的 0 保留空间。您的新 str
不是正确的 C 字符串。)
但是当我在我的代码之后写 str[i] 时,它还会在名称 "Muhammad Ashikuzzaman 8◙♠♥•-▬♂" 之后显示一些其他 ascii 值。我做了一个循环 i
关于奇怪的字符:注意我的最后一句话(我后来添加了它,所以你最初可能会错过它。)
@Jongware 感谢您的帮助。我明白了。【参考方案3】:
字符串在 c/c++/java/python 中是不可变的。不允许更改字符串中的某个字符。
Using character pointer strings is stored in two ways.
1.Read only string in a shared segment.
2.Dynamically allocated in heap segment.
当字符串值直接赋值给指针时,它只存储在段之间共享的只读段中
char *str = "Helloworld";
上述字符串“Helloworld”存储在共享只读位置,但指针str存储在读写内存中。您可以将 str 更改为指向其他内容,但目前无法更改 str 的值。
来源:http://www.geeksforgeeks.org/storage-for-strings-in-c/?
【讨论】:
以上是关于在 C++ 中更改字符串或字符指针的某些字符的主要内容,如果未能解决你的问题,请参考以下文章