1

そのため、文字列を受け取り、すべての小文字の値を大文字に変更する関数を作成しようとしています。コードは次のとおりです。

void lowerToUpper(char *s)                                                      
{                                                                               
    char *p;                                                                                                                                      

    for (p = s; *p; p++)                                                        
    {                                                                                                                                               
         if (islower(*p))                                                                             
             *p = toupper(*p);                                                                                                                                                                               
    }                                                                           
}                                                                               

int main (int argc, char * argv[])                                              
{                                                                               
     char *pa;                                                         

    pa = "This is a test.";                                                                                                

    printf("The following string will be edited:\n");                          
    printf("%s\n%s\n%s\n", pa);                                         

    lowerToUpper(pa);                                                                                                                      

    printf("The string has been edited, and is now as follows:\n");          
    printf("%s\n%s\n%s", pa);                                           

    return EXIT_SUCCESS;                                                        
}

問題は、「*p = toupper(*p);」という行から発生し、ここでセグメンテーション違反が発生します。私の推測では、 toupper(*p) が返す値を *p に代入しようとしたことで問題が発生したと思われます。いくつかのテストを行った後、toupper(*p) が機能しているように見えますが、値を *p に割り当てようとするとすぐに、seg fault? なぜこれが起こるのかについてのアイデアはありますか?

4

2 に答える 2

0

変化する:

   pa = "This is a test.";

に:

   pa = strdup("This is a test.");

変化する:

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

に:

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

また、おそらく「return」ステートメントの前に「free(pa)」を呼び出す必要があります。

于 2014-05-15T20:05:56.847 に答える