在C中格式化字符串

时间:2009-11-20 16:30:27

标签: c

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

printf("No record with name %s found\n", inputString);

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

char *str = ("No record with name %s found\n", inputString);

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

5 个答案:

答案 0 :(得分:30)

一个选项是使用sprintf,它的工作方式与printf类似,但它的第一个参数是指向缓冲区的指针,它应该将结果字符串放入其中。

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

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

答案 1 :(得分:10)

您正在寻找sprintf系列功能。他们的一般格式是:

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

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

char output[10];
sprintf(output, "%s", "This string is too long");

解决方案是使用snprintf函数,它采用长度参数:

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

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

答案 2 :(得分:7)

由于这是家庭作业(感谢您将其标记为此类),我建议您仔细查看...printf()系列函数。

我相信你会找到解决办法:)

答案 3 :(得分:3)

查看sprintf(见下文)。

int n = sprintf(str, "No record with name %s found\n", inputString);

答案 4 :(得分:3)

使用

sprintf(str, "No record with name %s found\n", inputString);