현재 위치 - 인적 자원 플랫폼망 - 미니프로그램 자료 - c에 문자열을 입력하고 오른쪽으로 N번 이동하여 새 문자열을 얻습니다.
c에 문자열을 입력하고 오른쪽으로 N번 이동하여 새 문자열을 얻습니다.
문제가 있는 경우 코드를 찾아보세요.char S2[]= { 0 };

이것은 s2가 1문자로 구성된 배열임을 의미합니다. strcpy(s2, s1)와 유사한 경우; s1의 길이(이 경우 n)가 1보다 크면 배열 액세스가 범위를 벗어난 것입니다. 배열 액세스 범위 초과와 같은 오류의 경우 결과는 불확실하며, 범위 초과 후 액세스한 메모리 주소의 관련 속성에 따라 프로그램이 정상적으로 실행되거나 충돌할 수 있습니다.

s2를 동적 배열로 변경하면 프로그램이 정상적으로 실행됩니다. 코드는 다음과 같습니다:

# include & ltstdio.h & gt

# include & ltstdlib.h & gt

# include & ltstring.h & gt

void LoopMove(char *s, int n)

{

char * s 1;

int t 1 = strlen(s);

int t = strlen(s)-n;

char * S2 = (char *)malloc((t 1+1)* sizeof(char));//t1+1 문자를 할당합니다. 1을 추가하는 이유는 C의 문자열은 기본적으로 ' \0 '으로 끝나기 때문이며, strlen의 결과에는 이 ' \0 '이 포함되지 않습니다.

memset(s2, 0, t 1+1); // s2의 내용을 지웁니다

s 1 = s+t;

printf("%d\n", t);

strcpy(s2, s 1);

strncpy(s2+n, s, t);

strcpy(s, s2);

free(s2);//무료 자원

}

int main()

{

int n = 4;

char s[] = " hello";

char * p = NULL

LoopMove(s, n);

printf("%s\n", s);

}