여기서 "cd fjadf"를 얻을 수없는 이유는 무엇입니까?
그리고 프로그램은 항상 나에게Bus error: 10...
이 super_cut_tail()
기능 을 사용 ///fjdakf
하여 사용자가 지정한 을 차단 하고 싶습니다 . 그런데 왜이 기능이 그것을 달성 할 수 없습니까?
char* super_cut_tail(char *char_arg, char *special) {
char *special_ptr;
special_ptr = strstr(char_arg, special);
int len = (int)strlen(char_arg) - (int)strlen(special_ptr);
char_arg[len] = '\0';
char_arg = strdup(char_arg);
return char_arg;
}
int main(int argc, char * argv[])
{
char *test = "cd fjadf///fjdakf";
char *outcome;
outcome = super_cut_tail(test, "///");
printf("test: %s\n", test);
return 0;
}
초기화에 사용 된 문자열을 수정하기 때문에 프로그램이 정의되지 않은 동작을 나타냅니다 test
. 사용할 때 :
char *test = "cd fjadf///fjdakf";
"cd fjadf///fjdakf"
프로그램의 읽기 전용 메모리에 보관됩니다. 라인에서 수행중인 해당 문자열 수정
char_arg[len] = '\0';
정의되지 않은 동작의 원인입니다.
사용하다:
char test[] = "cd fjadf///fjdakf";
다른 방법은 다음을 사용하는 것입니다.
char const* test = "cd fjadf///fjdakf";
super_cut_tail
수정을 시도하기 전에 먼저 문자열을 복사 하십시오.
char* super_cut_tail(char const* char_arg, char *special) {
char* ret_string = strdup(char_arg);
char *special_ptr;
special_ptr = strstr(ret_string, special);
int len = (int)strlen(ret_string) - (int)strlen(special_ptr);
ret_string[len] = '\0';
return ret_string;
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다