我有这样的主要功能:
void main()
{
char *s;
inputString(s);
printf("%s",s);
}
和inputString函数:
void inputString(char *&s)
{
//Some code line to input a string and set s point to this string
}
是否有一个函数auto malloc memory足够的存储字符串输入(我需要在inputString函数中输入字符串)。
答案 0 :(得分:5)
只需3行代码(将这些代码置于int main()
内)就足够了
std::string s;
std::cin >> s; //or getline() as desired
std::cout << s;
答案 1 :(得分:4)
如果你继续使用这种C风格的方法,那么不,你将不得不做出假设并自己分配足够的内存。 C ++方法更加优越,使用std :: strings而不进行手动分配:
#include <string>
#include <iostream>
void inputString(std::string& s)
{
//Don't bother for the memory management
}
int main()
{
std::string s;
inputString(s);
std::cout << s ;
}
另请注意,您的代码不是合法的C ++。 void main()
非法!!!
编辑: 在回答此问题时,问题被标记为C ++。后来这个问题没有被OP重新标记,我也不太同意......
答案 2 :(得分:1)
您在示例中混合使用C和C ++。
在您使用 s 之前,应该初始化它。例如,像这样:
void inputString(char *&s)
{
s = strdup(xxx); // or malloc, calloc, etc.
}
但实际上,最好只使用普通的旧C:
char* inputString(void)
{
char* s = strdup(xxx);
return s;
}
答案 3 :(得分:1)
假设你这样做是C而不是C ++。
有两种方法,inputString
必须分配内存,或者inputString
的调用者必须分配内存。
如果inputString分配内存,你的函数可能会像:
char* inputString(void)
{
int len = strlen (MyInternalString) + 1;
char* s = malloc (len);
strncpy(s, MyInternalString, len);
return s;
} //similar to what Rustram illustrated
你还应该包括: void freeString(char * str) { 自由(STR); } 同样。这使用户清楚地知道他们需要自己管理返回字符串的内存。
或者,您可以编写inputString,其中用户需要提供所需的内存。这将看起来像
int inputString(char* str, int maxLen) //
{
if (maxLen >= myInternalStringLength + 1)
{
strncpy(str, myInternalString, maxLen)
}
return myInternalStringLength + 1;
}
这里我的字符串的用户可以检查返回代码,看看他分配的缓冲区是否足够大。如果它太小,那么他总能重新分配一个更大的
你的主要成为:
int main()
{
char *s = NULL;
int len = inputString(s, 0);
s = alloca(len); //allocates the memory on the stack
len = inputstring(s, len);
printf("%s",s);
} //no need to free the memory because the memory alloca'ed gets
//freed at the end of the stack frame
答案 4 :(得分:0)
int main()
{
std::string s;
inputString(s);
printf("%s",s.c_str());
}
和inputString函数:
void inputString(std::string& s)
{
//Some code line to input a string and set s point to this string
std::cin >> s;
}