I가 C의 다음 기능 :숯 *의 str`와 '숯 STR []'차이 '문자열의 선언
int TransMinMaj(char *c)
{
if((*c) >= 'a' && (*c) <= 'z')
{
*c += 'A' - 'a';
return 1;
}
else if((*c) >= 'A' && (*c) <= 'Z')
return 1;
return 0;
}
볼 수 있듯이,이 함수 :
1. 반환 한 시험 캐릭터가
2.
3. 그렇지 않으면 대문자 소문자 변환 편지 인 경우, 내가 하 0
(이 편지가 아닌 것을 나타 내기 위해서 (때문에))를 돌려 전달 된 매개 변수 c
의 값을 메모리에서 변경하려고하기 때문에 주소로 매개 변수를 전달하도록 선택했습니다.
이제 내 질문에 온다 : 내 기능은 다음 코드가는 가지 테스트 : 지금까지
char str[] = "abcdefg";
printf("Before: %s\n", str);
TransMinMaj(&str[1]);
printf("After: %s\n", str);
을, 모든 좋은, 아니 오류, 경고없이. 보시다시피이 테스트에서는 소문자 b
(문자열의 두 번째 요소 (문자 배열))을 메모리의 대문자 'B'로 변환합니다. 테스트 코드에게 litte 조금 변경하면
char *str = "abcdefg";
printf("Before: %s\n", str);
TransMinMaj(&str[1]);
printf("After: %s\n", str);
이 분할 오류가을 (코어 덤프). 하지만 이유는 모르겠습니다.
1. 선언 char *str
과 char str[]
의 차이점은 무엇입니까 : 그래서 여기
내 질문에 온다?
2. 내 세그먼트 오류는 어디에서 발생합니까?
질문하기 전에 검색을 사용하십시오. 귀하의 질문이 전에 요청되었을 가능성이 큽니다. 이것은 처음부터 물어 왔습니다. – 2501
포인터로 할 수있는 일 : ptr1 = ptr2; 배열과 함께. 포인터를 사용하면 ptr1 ++을 수행 할 수 있습니다. 배열과 함께. 배열을 사용하면 sizeof (array)/sizeof (array [0])를 호출 할 수 있습니다. 그리고 그런 것들 – jurhas