在 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++ 中更改字符串或字符指针的某些字符的主要内容,如果未能解决你的问题,请参考以下文章

C++ 使用存储在字符串中的函数名称获取函数指针或评估函数

C 或 C++。如何比较给定 char * 指针的两个字符串?

c++ 最终常量字符串

c语言用指针法在一个字符串的指定位置插入一个字符串

指向字符串的指针无法更改字符

c++通过指针变量对键盘输入的字符串中的字符按ASCII码值从小到大排列有如下要求定义一个字符数组