在C中格式化字符串

its*_*ode 4 c

通常你可以像这样在C中打印一个字符串.

printf("No record with name %s found\n", inputString);
Run Code Online (Sandbox Code Playgroud)

但我想用它制作一个字符串,我该怎么做呢?我在寻找像这样的东西..

char *str = ("No record with name %s found\n", inputString);
Run Code Online (Sandbox Code Playgroud)

我希望很清楚我在寻找什么......

Jam*_*lis 30

一种选择是使用sprintf,它的作用就像printf它的第一个参数一样,指向缓冲区,它应该将结果字符串放入其中.

最好使用snprintf,它采用包含缓冲区长度的附加参数来防止缓冲区溢出.例如:

char buffer[1024];
snprintf(buffer, 1024, "No record with name %s found\n", inputString);
Run Code Online (Sandbox Code Playgroud)


Ben*_*ack 10

你正在寻找sprintf功能家族.他们的一般格式是:

char output[80];
sprintf(output, "No record with name %s found\n", inputString);
Run Code Online (Sandbox Code Playgroud)

但是,sprintf它本身是非常危险的.它容易出现称为缓冲区溢出的问题.这意味着sprintf不知道output你提供的字符串有多大,所以它会愿意为它写入比可用数据更多的数据.例如,这将干净地编译,但会覆盖有效的内存 - 并且没有办法让它sprintf知道它做错了什么:

char output[10];
sprintf(output, "%s", "This string is too long");
Run Code Online (Sandbox Code Playgroud)

解决方案是使用函数as snprintf,它接受一个length参数:

char output[10];
snprintf(output, sizeof output, "%s", "This string is too long, but will be truncated");
Run Code Online (Sandbox Code Playgroud)

或者,如果您使用的是Windows系统,则可以使用_sntprintf变体和朋友,以防止输入或输出字符串溢出.

  • 由于这是一个家庭作业问题,我只想指出`sizeof output`只给出`char`数组中的*elements*的数量 - 通常的做法是使用:`sizeof array/sizeof array [0]` ,它的工作原理不依赖于各种类型的大小.另外,它也适用于`char`数组.:) (3认同)

Rem*_*o.D 7

由于这是作业(感谢标记它),我建议你仔细看看...printf()函数系列.

我相信你会找到解决方案:)

  • 嗯,看起来像其他人alredy剥夺了你发现的乐趣:) (3认同)