我正在编写一个应该返回Hello world!的函数,但它会返回Hello Wo ..我在return语句之前添加了一个cout来检查值并且它是正确的。
我将两个参数传递给函数,一个和两个,我的函数结合了单词并返回。我编写了一个循环来将一个转换为一个新的char,因此我访问它的数组时原始传递的值没有受到影响。
功能:
char* myStrCat(char inputOne[], char inputTwo[]){
int sizeOne = myStrLen(inputOne);
int sizeTwo = myStrLen(inputTwo);
char functionTemp[100];
for(int tempReplace = 0; tempReplace < sizeOne; tempReplace++){
functionTemp[tempReplace] = inputOne[tempReplace];
}
for(int i = 0; i < sizeTwo; i++){
functionTemp[i + sizeOne] = inputTwo[i];
}
cout << "check: " << functionTemp << endl;
return functionTemp;
}
答案 0 :(得分:4)
functionTemp
是一个局部变量,myStrCat()
返回局部变量的地址,读取编译器警告。
不是将functionTemp
作为本地静态数组,而是将functionTemp
作为pointer
,并使用new
为pointer
动态分配内存并返回指针。< / p>
修改:
char* myStrCat(char inputOne[], char inputTwo[]){
int sizeOne = strlen(inputOne);
int sizeTwo = strlen(inputTwo);
int bytes = sizeOne + sizeTwo;
char *functionTemp = new char [bytes + 1];/* allocating memory dynamically for functionTemp */
for(int tempReplace = 0; tempReplace < sizeOne; tempReplace++){
functionTemp[tempReplace] = inputOne[tempReplace];
}
for(int i = 0; i < sizeTwo; i++){
functionTemp[i + sizeOne] = inputTwo[i];
}
cout << "check: " << functionTemp << endl;
return functionTemp;
}
在获得串联字符串/动态地址后调用函数时,使用delete
释放它以避免内存泄漏。一个简单的调用函数看起来像
int main() {
char *temp = NULL;
temp = myStrCat("Stack","overflow");/* temp holds dynamic address */
cout<<temp<<endl;
/* free the dynamically allocated memory */
delete [] temp ;
return 0;
}