@關于C語言函數返回char *類型的一些問題TOC
創新互聯是一家專業提供汝城企業網站建設,專注與網站設計制作、做網站、H5響應式網站、小程序制作等業務。10年已為汝城眾多企業、政府機構等服務。創新互聯專業的建站公司優惠進行中。關于C語言函數返回char *類型的一些問題以下是我在寫C語言中返回值類型為char *函數時遇到的一些問題,在參考了博客:https://blog.csdn.net/Xixo0628/article/details/119870914后修改代碼可成功運行。
題目輸入一個字符串,然后輸入兩個字符,輸出該字符串中從第一個字符匹配的位置到第二個字符匹配的位置的所有字符。通過返回字符指針的子函數實現。(從字符串的開頭搜索第一個字符,同時從字符串的末尾查找第二個字符。)輸入:programming r g,輸出:rogramming。
原代碼#include#includechar* subString(char str[50], char a, char b){int i = 0, j = 0, count1 = 0, count2 = 0;
char *newstr;
while(str[i] != '\0'){if(str[i] == a){ count1++;
}
if(str[i] == b){ count2++;
}
if(count1>=1 && count2<=2){ newstr[j] = str[i];
j++;
}
i++;
}
newstr[j] = '\0';
return newstr;
}
int main(){char str[50];
printf("Enter a string:");
gets(str);
char* res = NULL;
printf("Enter two char:");
char a,b;
scanf("%c %c",&a,&b);
res = subString(str,a,b);
printf("%s",res);
return 0;
}
運行結果
很奇怪,返回值不為0,無結果輸出
char* subString(char str[50], char a, char b){int i = 0, j = 0, count1 = 0, count2 = 0;
//此處添加了malloc
char *newstr = (char *)malloc(sizeof(char));
while(str[i] != '\0'){if(str[i] == a){ count1++;
}
if(str[i] == b){ count2++;
}
if(count1>=1 && count2<=2){ newstr[j] = str[i];
j++;
}
i++;
}
newstr[j] = '\0';
return newstr;
}
運行結果
成功!
當函數返回作為數組名的newstr之后,臨時字符數組的空間就會被釋放。之后又重新調用了新的函數printf,導致最終根據返回指針所輸出的結果變成了刷新后的值,而這個值幾乎可以認為是隨機的。
你是否還在尋找穩定的海外服務器提供商?創新互聯www.cdcxhl.cn海外機房具備T級流量清洗系統配攻擊溯源,準確流量調度確保服務器高可用性,企業級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧
分享標題:關于C語言函數返回char*類型的一些問題-創新互聯
文章鏈接:http://vcdvsql.cn/article42/ccicec.html
成都網站建設公司_創新互聯,為您提供網站設計、面包屑導航、微信小程序、云服務器、網站策劃、搜索引擎優化
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯