Gre*_*ill 43
没有办法告诉sprintf()
不要写尾随空值.你可以做的是sprintf()
用来写一个临时字符串,然后像strncpy()
只复制你想要的字节.
Dou*_* T. 25
sprintf返回写入的字符串的长度(不包括空终端),您可以使用它来知道空终端的位置,并将空终端字符更改为其他位置(即空格).这比使用strncpy更有效.
unsigned int len = sprintf(str, ...);
str[len] = '<your char here>';
Run Code Online (Sandbox Code Playgroud)
您无法使用 sprintf() 执行此操作,但您可以使用 snprintf() 执行此操作,具体取决于您的平台。
您需要知道要替换多少个字符(但是当您将它们放入字符串的中间时,您可能已经知道了)。
这是有效的,因为 snprintf() 的某些实现不保证写入终止字符 - 大概是为了与 stncpy() 等函数兼容。
char message[32] = "Hello 123, it's good to see you.";
snprintf(&message[6],3,"Joe");
Run Code Online (Sandbox Code Playgroud)
在此之后,“123”被替换为“Joe”。
在 snprintf() 即使字符串被截断也能保证空终止的实现上,这将不起作用。所以如果代码可移植性是一个问题,你应该避免这种情况。
大多数基于 Windows的 snprintf()版本都表现出这种行为。
但是,MacOS和 BSD(也许还有 linux)似乎总是以 null 结尾。
归档时间: |
|
查看次数: |
68457 次 |
最近记录: |