我想通过外部函数修改main函数中存在的字符串变量,传递相同的地址。
以下是我撰写的代码
void change(char * str)
{
str="Max";
}
void main()
{
char a[]="Test";
change(a);
cout<<a;
}
如果我错了,请纠正我
请注意我使用的是Borland Turbo C ++ 4.5。
答案 0 :(得分:3)
我猜你的意思是通过引用传递,你可以简单地通过引用传递给定的字符串,如下所示:
void modifyString( string& str)
{
//modify the string
}
在main
内,您可以调用此函数。
答案 1 :(得分:1)
首先,你不应该使用Turbo C / C ++,它是很久以前的最后一次更新,
您可以按如下方式更改函数中的字符串,
void change(char * str)
{
*(str+0)='M';
*(str+1)='A';
*(str+2)='X';
*(str+3)='\0';
}
int main()
{
char a[]="Hello";
change(a) ;
}
答案 2 :(得分:1)
你想要这个:
void change(char * str)
{
strcpy(str,"Max");
}
回想一下指针是什么,指针本身不能只改变它所指向的内容。
答案 3 :(得分:0)
你问,
提交此代码后“如果我错了,请纠正我”
:
void change(char * str)
{
str="Max";
}
void main() {
char a[]="Test";
change(a);
cout<<a;
}
所以,这里是:
str="Max";
仅更改本地指针str
。使用符合C ++ 11标准的编译器,它甚至不会编译,因为str
被声明为char*
而文字"Max"
的类型为char const [4]
,并且C ++ 11不再支持从字符串文字到指针到非const
的隐式转换。
void main
无论使用哪种标准,都不会使用任何符合标准的C或C ++编译器进行编译。但是,visual c ++会在没有诊断的情况下编译它。并且可能还有旧的turbo c ++,但请注意turbo c ++ 早于第一个C ++标准(1998年出版)。对于普通的托管C ++实现,标准需要int
的{{1}}结果类型。
main
如果不包含cout<<a;
且具有<iostream>
声明或指令,则不会使用符合标准的编译器进行编译。请注意,这随着标准化而改变。在1998年标准之前,在ARM C ++中,您可以包含using
并使用不合格的<iostream.h>
。
在现代C ++中,正确的方法是
cout
another answer,正如我写的那样,您选择了“解决方案”,建议使用原始指针和#include <iostream> // std::cout, std::endl
#include <string> // std::string
using namespace std;
string foo() { return "Max"; }
int main()
{
string a = "Test";
a = foo(); // Changed!
cout << a << endl;
}
,而不是 strcpy
。使用原始指针和数组是建议,如果你遵循它会让你不高兴。例如,很容易无意中写入超出提供的缓冲区的末尾,带来灾难性的影响。所有权处理非常难以正确执行,等等。这个建议大概是在回答文字问题的Stack Overflow传统中给出的,而不考虑问题的真正含义,这是获得Stack Overflow声望点的好方法(它击败了我对他们这么可取,愚蠢的T恤或其他什么都不值得),代价是给别人造成严重的问题,有点像为了偷一小块巧克力而给一些旁观者致残。