하나의 경우 문자열 리터럴을 수정할 수 없습니다. 정의되지 않은 동작입니다.
당신이
str
에게 로컬 배열 할 수 있음을 해결하려면 : 두 번째 문제가있는 것, 지금
char str[] = "First string";
을 str
이 str2
을 보관 유지하는데 충분한 크기가 아닌 것입니다. 따라서 길이를 늘려야합니다. 그렇지 않으면 str
을 오버런합니다. 이는 정의되지 않은 동작이기도합니다.
이 두 번째 문제를 해결하려면 str2
만큼 길게 str
을 만들어야합니다.
char *str2 = "Second string";
char *str = malloc(strlen(str2) + 1); // Allocate memory
// Maybe check for NULL.
strcpy(str, str2);
// Always remember to free it.
free(str);
는 (C99)에 블라스를 포함하는이 작업을 수행하고 할당을 쌓아 다른 더 우아한 방법이있다, 그러나 그들의 사용은 다소 의문이다 나는 그로 이동하지 않습니다 또는 동적으로 할당합니다. @SangeethSaravanaraj이 코멘트에 지적
은, 모두가 #import
를 놓쳤다. #include
이어야합니다.
#include <stdio.h>
#include <string.h>
음,'나 strlen (캐릭터를) 메모리를 asign 필요
<나 strlen를 사용 할 때마다 (str2)'. –
누구나'# import'가 누락 되었습니까? !! –
@SangeethSaravanaraj 네, 믿을 수 없습니다. LOL 모두들 그걸 놓쳤다 ... – Mysticial