据我了解,正确的编程风格告诉如果你想从另一个函数获取字符串(char [])最好由调用者创建 char * 并将其与创建的字符串长度一起传递给字符串格式化函数。在我的情况下,字符串格式化函数是“getss”。
void getss(char *ss, int& l)
{
sprintf (ss,"aaaaaaaaaa%d",1);
l=11;
}
int _tmain(int argc, _TCHAR* argv[])
{
char *f = new char [1];
int l =0;
getss(f,l);
cout<<f;
char d[50] ;
cin>> d;
return 0;
}
"getss" 格式化字符串并将其返回给 ss*。我认为 gets 不允许超出调用者创建的字符串长度。据我了解,调用者通过变量“l”告诉长度,“getcc”返回长度,以防缓冲区未完全填充但不允许超出调用者定义的数组范围。
但现实告诉我,调用者创建的缓冲区大小并不那么重要。没关系,如果您创建大小为 1,并填充 11 个字符长。在输出中,我将获得“getss”已填充的所有字符。
那么传递长度变量的原因是什么 - 你总是会得到零终止的字符串,你会根据它找到结尾。
如果getss可以扩展它,创建具有指定长度的缓冲区的原因是什么?
它是如何在现实世界中完成的——从另一个函数中获取字符串?