2011-11-07 2 views
1

내 문자열이 다이아몬드 나 임의 문자의 물음표와 같이 무의미한 기호로 인쇄되는 다른 작업으로이 문제가 발생했습니다. 문자열이 이상한 기호로 표시됩니다.

이 시간

나는이 나에게조차 말과 같은 길이없는 횡설수설을 제공

char *word = "blah"; 
printf("word: %s", word); 

할 노력하고 있어요. 나는 string.h를 포함시켰다.

내가하려는 것은 문자열을 가져 와서 한 번에 두 글자를 문자열 앞이나 뒤에 추가 한 다음 문자열의 뒷부분에서 문자를 추출하는 것입니다. 다음 방법을 사용하여 추가 :

int len = strlen(word); 
word[len] = 'd'; 

또한 어떻게 마지막 두 문자를 추출합니까? 나는 단어의 strlen을 가져 와서 그것을 문자 배열로 바꾸고 indice에서 indice로 복사하여 그것을 추출한다고 가정하고있다. 더 좋은 방법이 있습니까? 또한 무작위 질문 : 언제 '\ 0'을 사용합니까? 이 경우에 필요합니까?

나를 도울 수있는 사람에게 감사드립니다.

+0

횡설수조가 나오는 코드를 게시하십시오. 추가하는 것과 관련하여 사용중인 char 배열에 충분한 공간이 할당되어 있지 않으면 [len]이라는 단어를 말할 수 없습니다. 당신이 char * word = "hello"라고 말하면; 편지를 추가하려고하면 ... 나쁜 생각입니다! –

+1

참고로, 'word'가 가리키는 문자열 리터럴 인 'blah'는 읽기 전용 위치에 있으며 수정할 수 없습니다.사실, 그것은 - const char * word = "blah"; – Mahesh

+0

전체 코드를 보여줍니다. –

답변

3

코드 길이가 word이고 이 아닌 숫자는이며 끝에 null 종결자가 포함됩니다. 그런 다음 행으로 종결을 덮어 진행 :

word[len] = 'd'; 

그래서 지금 당신은 제대로 종료되지 않습니다 및 I/O 기능이 잘 재생되지 않습니다 문자열을 가지고있다. 생각해 내다; indeces는 0에서 시작됩니다. 길이가 x 인 문자열에는 0부터 x-1까지의 범위에서 액세스 할 수있는 문자가 있습니다.

그 외에도 처음에 word을 어떻게 작성했는지 표시하지 않으므로 여기에도 문제가있을 수 있습니다. 처음부터 제대로 초기화하지 않았다면 메모리 전체를 밟아서 수정하지 말아야 할 것입니다.

편집 : 당신은 당신이 여기에 캐릭터를 생성하고 코드를 게시, 그래서 좋아, 또 다른 문제 :

char *word = "blah"; 

정말해야

const char *word = "blah"; 

word 포인트 만 읽을 수 있기 때문에 기억. word이 가리키는 것을 수정할 수 없습니다. 문자열을 나중에 수정해야하는 경우 배열을 만드십시오.

char word[] = "blah"; 
+0

문자열을 만들어 printf로 표시하고 다른 방법으로 변경하지 않더라도 여전히 횡설수설합니다. 도움??? – user963070

+0

@ user963070 : 그래, 그럴 경우 우리에게 알려주지 않은 다른 일이 있습니다. –

+0

나는 무엇을 말할 지 모른다. 우분투를 다시 시작했는데 이제 끝났어. 나는 과거에는 문제가 있었지만, 원하는 문자열에 이상한 기호가 추가 된 다음 다시 시작하면 도움이되지 않았습니다. 그들은 완전히 임의의 문자였습니다. 나는 그것이 도움이 될 것을 보여 줄지 모른다. – user963070

0

여기서 단어는 한 번에 malloc을 수정하기 위해 문자에 대한 포인터입니다. 그래서 당신은 memcpy 함수 나 strcpy,strcat 함수를 사용해야하는이 문자열의 변경을 원합니다.

이러한 함수를 사용하면 문자열 앞뒤에 임의의 수의 문자를 추가 할 수 있습니다.

관련 문제