在C++中更改字符串或字符指针的某些字符

问题描述:

我会非常感谢并能够帮助我的人帮助我。它在C/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行出现未处理的异常,并且输出不显示。我需要更改字符指针的任何特定字符。请帮帮我。

+4

打开您的编译器警告。他们全部。直到你读完所有内容后才能回来。 – 2014-09-04 21:02:47

+0

“Muhammad ashikuzzaman”是一个常量字符串;分配内存并将其复制到该内存中,然后根据需要进行修改。 – abiessu 2014-09-04 21:03:10

+0

谢谢@abiessu。我分配了动态内存并获得了解决方案。 – 2014-09-04 21:18:01

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)); 
+0

这不是很好的示例代码。很多不必要的变动和覆盖变量。最后一行最好写成'printf(“%s”,str);',但是甚至'str [i]'会比(*(str + i)'更好。 (另外,你忘了保留终止0的空间。你的新'str'是*不是一个合适的C字符串。) – usr2564301 2014-09-04 21:46:17

+0

但是当我在代码后面写str [i]时,它也显示了一些其他ascii值名字“Muhammad Ashikuzzaman8◙♠♥•-▬♂”。我做了一个循环,因为我 2014-09-04 21:53:27

+0

关于奇怪的字符:记下我最后一句(我稍后添加它,以便您可能最初错过了它。) – usr2564301 2014-09-04 21:57:56

字符串文字在C和C++中是不可变的。这是任何尝试修改它们都会导致程序未定义的行为。相反,这些语句

char *str; 
str="Muhammad ashikuzzaman"; 

使用这一个

char str[] = "Muhammad ashikuzzaman"; 

至于你的定义和指针海峡的初始化,然后在C++正确的代码看起来像在C

const char *str; 
str="Muhammad ashikuzzaman"; 

字符串常量++有常量字符数组的类型。

+0

谢谢@Vlad来自莫斯科我曾经使用动态内存分配,并得到了一个确切的解决方案.. – 2014-09-04 21:21:16

字符串在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以指向别的东西,但不能改变当前的值。

来源:http://www.geeksforgeeks.org/storage-for-strings-in-c/