[問題] return pointer
我做了一個funtion回傳值是pointer 的練習:
輸入 abc 字串到 toUpper() 之後會印出 ABC
我想在toUpper()裡面做完轉換之後
不是回傳字串ABC 而是回傳字串的位址給 main()
main()可以從回傳的位址找到轉換後的字串ABC 並且印出
我先貼上我三個錯誤的想法以及問題 文章最後有正確解答
有高手能幫我看一下
回答一下我的盲點嗎? 感謝
===================
1.
function.c: In function ‘char* toUpper(char*)’:
function.c:25: warning: address of local variable ‘bbb’ returned
我設了一個bbb矩陣在toUpper()裡面暫時存放main()下來的字串
然後傳回bbb (因為按照之前我看的內容 矩陣第一個元素等同於位址)
所以回傳的bbb是位址沒錯吧
編譯結果有一個warning 輸出結果為亂碼
char *toUpper(char *ptr){
int len;
int i=0;
len = strlen(ptr);
char bbb[len];
for(i=0;i<len;i++){
bbb[i]=toupper(*(ptr+i));
}
return bbb;
}
===================
2.
因為1.的錯誤 所以我再toUpper()裡面又設了一個char *newStr變數
一樣把bbb當作暫存器並且轉換後存在bbb裡面
最後再把 newStr=bbb
輸出結果一樣為亂碼
char *toUpper(char *ptr){
int len;
int i=0;
len = strlen(ptr);
char bbb[len];
char *newStr;
for(i=0;i<len;i++){
bbb[i]=toupper(*(ptr+i));
}
newStr=bbb;
return newStr;
}
======================
3.
因為2.
我以為是不是因為沒有讓newStr知道我的字串長度所以電腦不知道要安排多少記憶體
所以我稍微改成char *newStr=new char[len];
一樣輸出亂碼
char *toUpper(char *ptr){
int len;
int i=0;
len = strlen(ptr);
char bbb[len];
char *newStr=new char[len];
for(i=0;i<len;i++){
bbb[i]=toupper(*(ptr+i));
}
newStr=bbb;
return newStr;
}
===================
正解
#include <iostream>
#include <cstring>
#include <cctype>
using namespace std;
char *toUpper(char *);
int main (){
char aaa[]={"happy birthday"};
char *r;
int i;
r = toUpper(aaa);
cout << "UPPERCASE = " << r <<endl;
}
char *toUpper(char *ptr){
int len;
int i=0;
len = strlen(ptr);
char *newStr=new char[len];
for(i=0;i<len;i++){
*(newStr+i)=toupper(*(ptr+i));
}
return newStr;
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 69.205.68.125
→
02/22 14:39, , 1F
02/22 14:39, 1F
→
02/22 14:41, , 2F
02/22 14:41, 2F
→
02/22 14:43, , 3F
02/22 14:43, 3F