簡體   English   中英

從 function 返回字符串時出現分段錯誤

[英]segmentation fault when returning string from function

我想知道這段代碼應該打印什么。 我想檢查它是否打印we can, can wewe can ,但是我得到了分段錯誤。

這是代碼:

char* mysubstr() {
    char* x = "Yes we can, can we";
    char* y = "we can";
    char* tmp = x;
    
    while(*tmp) {
        if (*tmp == *y)
            return *tmp;
        tmp++;
    }
    return x;
}


void main() {
    printf("%s", mysubstr());
}

我認為錯誤的部分是return *tmp; , 但為什么? 那有什么問題?

您的編譯器基本上已經告訴您出了什么問題:

return makes pointer from integer without a cast

這是因為您定義了一個 function 返回一個char *但您返回一個char

char *tmp = x; 您定義一個指針,並在您的 return 語句中取消引用它。 因此你返回(char*)'w'

如果您將該返回值用於printf值,則'w'將被視為導致崩潰的地址。

你應該做return tmp;

這不是您的代碼中的唯一問題。 您的 function 名稱表明您想要制作一些 substring function。 Bur 您的代碼立即返回,它發現第二個字符串中的第一個字母匹配。 您不驗證其他字符是否也相同。

以下作品:

char* mysubstr()
   {
       char* x = "Yes we can, can we";
       char* y = "we can";
       char* tmp = x;
  
       while(*tmp)
       {
           if(*tmp == *y)
           {
               return (char*) tmp;
           }
           tmp++;
       }
       return (char*) x;
   }
  
   int main()
   {
       printf("%s", mysubstr());
       return 0;
  }

答案是:

**We can, can we**

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM