将char指针传递给另一个函数:空白值.c++
Passing char pointer to another function: blank value. c++
我有以下非常简单的程序。
int modify(char * v){
v = "123" ;
return 0;
}
int main (int argc, char** argv){
char *test = new char[10];
modify(test);
std::cout << test;
return 0;
}
我知道我可以打印出"123",但我故意用这种方式来学习指针是如何工作的。但是,不会打印"123"。我应该如何正确地传递指针?
您必须记住,在C++中,参数默认由值传递,这意味着在函数中您有副本。,并且修改副本不会改变原始副本。
如果您想将指针更改为指向其他对象,则需要通过引用传递。然而,在这种情况下,它将导致其他问题,因为您随后会丢失原始指针。
因此,解决方案是使用通过引用传递的std::string
,或者使用strcpy
顶部副本到目标内存区域(但如果使用strcpy
,则必须注意不要写超出分配的内存)。
在修改strcpy(v, "123")
中尝试此操作
您的代码有几个问题。
你的modify()
功能实际上什么都没改变:
int modify(char * v) {
v = "123"; // overwrites the parameter value copy on the stack
// with a char[] literal pointer
return 0;
}
您需要从文字复制到指针:
int modify(char* v) {
strcpy(v,"123");
return 0;
}
您没有释放分配的内存,这可能会在其他情况下导致内存泄漏
int main (int argc, char** argv){
char *test = new char[10];
modify(test);
std::cout << test;
delete [] char; // <<< Note
return 0;
}
正如Joachim Pileborg已经提到的,c++最合适的解决方案是使用std::string
而不是char*
。
相关文章:
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- 对RValue对象调用的LValue ref限定成员函数
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- QML 函数始终返回空白
- C++,从另一个变为空白的函数写入输出文件
- 从字符数组中删除空白和标点符号的函数
- 我在我的程序中添加了一个void函数,它不接受任何参数,现在我的程序在运行时只返回一个空白终端
- 如何清除包含C函数声明的字符串中的注释和中间空白
- 用C++解释空白类函数
- 将char指针传递给另一个函数:空白值.c++
- 在调用函数c++之后,用另一个字符替换空白
- 空白函数c++中的作用域
- Wordwap函数修复保留单词之间的空白