문자열이있는 "prompt"문자열이 있습니다. 사용자는 공백을 구분 기호로 사용하여 수집 및 분리 한 문자열을 토큰 (토큰) char
의 배열로 사용자 입력을 통해 프롬프트를 변경할 수 있어야합니다.C에서 문자열 배열의 단일 요소를 다른 문자열로 복사 할 수 없습니다.
예를 들어, 가정
char **tokens[2] = {"setprompt", "newprompt"};
char *prompt = "oldprompt";
if(strcmp(tokens[0], "setprompt") == 0)
{
strcpy(prompt, tokens[1]);
}
strcmp()
기능이 완벽하게 잘 작동, 그것은 strcpy()
에 도달 할 때, tokens[1]
의 요소 (문자열 "newprompt"
인) 문자열 프롬프트에 복사되지 않습니다. 이것은 내 문제입니다.
대신 strncpy()
을 사용하는 것 외에도 문제 해결을 시도했지만 각 변수/포인터에 대한 내 선언에 문제가 있다고 생각합니다. 어떤 도움이나 아이디어라도 좋을 것입니다.
참고 : 실제 프로그램에서 토큰 배열의 최종 크기는 2가 아닙니다.이 예는 간단히하기 위해 수정되었습니다. 감사!
char *prompt = "oldprompt";
그것은 일정한 메모리를 가리키는과 (가 정의되는 방식)을 수정할 수 없습니다 :
컴파일러 경고를 사용합니다. 'char ** tokens [2] = { "setprompt", "newprompt"};'-> "경고 : 호환되지 않는 포인터 유형에서 초기화". – chux
'char ** 토큰 [2] = ...'->'char * 토큰 [2] = ...'너무 많은'*'가 있습니다. [@Michael Dorgan] (https://stackoverflow.com/a/47297880/2410359)은 다른 문제에 대한 좋은 단서를 가지고 있습니다. – chux