[英]segmentation fault when returning string from function
我想知道這段代碼應該打印什么。 我想檢查它是否打印we can, can we
或we 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.