2014-09-04 2 views
1

정말 고맙게 생각하며 도와 주실 수있는 분께 감사드립니다. 그것은 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

컴파일러 경고를 켭니다. 모두들. 네가 그들을 모두 읽을 때까지 다시 오지 마라. –

+0

''무함마드 ashikuzzaman ''은 상수 문자열입니다; 메모리를 할당하고이 문자열을 복사 한 다음 필요에 따라 수정하십시오. – abiessu

+0

고마워요 @abiessu. 동적 메모리를 할당하고 해결책을 얻었습니다. –

답변

0
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

+0

그러나 내 코드 뒤에 str [i]를 쓰면 다른 아스키 값도 표시됩니다. 이름 "Muhammad Ashikuzzaman 8◙ ♠ ♥ • -LO ♂". 나는

+0

이상한 문자 : 마지막 문장을 기록하십시오 (나중에 추가 했으므로 나중에 놓쳤을 수도 있습니다). – usr2564301

6

문자열 리터럴은 C 및 C++에서 불변입니다. 프로그램을 수정하려고 시도하면 프로그램의 정의되지 않은 동작이 발생합니다. 대신

char *str; 
str="Muhammad ashikuzzaman"; 

사용하여 정의와 포인터 str을 초기화에 관해서는이 하나

char str[] = "Muhammad ashikuzzaman"; 

이러한 진술의 다음 C++에서 올바른 코드는 C에서

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

문자열 리터럴과 같이합니다 ++ 상수 문자 배열 유형을가집니다.

+0

모스크바에서 @Vlad 감사합니다. 동적 메모리 할당을 사용하여 정확한 해결책을 얻었습니다. –

0

문자열은 c/C++/java/python.changing에서 변경할 수 없습니다. string의 특정 문자는 허용되지 않습니다.

문자열 값이 포인터에 직접 할당
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/?