C言語文字列処理の可変文字列について

1123 ワード

        ,         C                      ,          ,             。
void change(char *str){
    char *p = str;
    while(*p!='\0'){
        if(*p>='a' && *p<='z'){
            printf("%c
",*p); *p= *p - 'a' + 'A'; } p++; } }

このコード自体には間違いはありませんが、どのように使うかも重要です.
int main()
{
    char *p = "school";	
    printf("%s
",p); change(p); printf("%s
",p); return 0; }

最初は上のように呼び出されましたが、メモリエラーが発生し続け、理解できませんでした.
後で突然pが定数文字列を指していることを思い出して、それは修正することができなくて、静的文字列に相当して、もし修正可能な文字列になるならば、文字列に動的な記憶空間を与えて、それに可変性を持たせる必要があります.
int main()
{

    char *str = (char *)malloc(sizeof(char)*50);
    char *p = "school",*tempstr=str;/*  p           */
    while(*p!=NULL){
	*(tempstr++)=*p++;
    }
    *tempstr='\0';/*   str         */
    printf("%s
",str); change(str); printf("%s
",str); return 0; }