该函数strncpy()
并不总是null终止所以我想知道什么是总是null终止的最佳替代?我想要一个函数,如果:
strlen(src) >= n /*n is the number of characters to be copied from source*/
没有必要像这样添加更多代码:
buf[sizeof(buf)-1] = 0;
RoadRunner.. 6
如果您想要复制的字符串长度未知,可以snprintf
在此处使用.此函数将格式化输出发送到str.它的行为类似于sprintf()
,但不会写入由str分配的更多字节.如果结果字符串长于n-1
字符,则剩余的字符将被省略.\0
除非缓冲区大小为,否则它也始终包含空终止符0
.
这将是一个替代strncpy()
或者strcpy()
,如果你真的不想使用它.但是,在字符串末尾手动添加空终止符strcpy()
始终是一种简单有效的方法.在C中,在任何已处理的字符串的末尾添加空终止符是非常正常的.
以下是使用的基本示例sprintf()
:
#include#include #include #define SIZE 1024 int main(void) { const size_t N = SIZE; char str[N]; const char *example = "Hello World"; snprintf(str, sizeof(str), "%s", example); printf("String = %s, Length = %zu\n", str, strlen(str)); return 0; }
打印出来:
String = Hello World, Length = 11
此示例显示snprintf()
复制"Hello World"
到str
,并\0
在末尾添加了终止符.
注意: strlen()
仅适用于空终止字符串,如果字符串未终止,则会导致未定义的行为.snprintf()
还需要更多错误检查,可以在手册页上找到.
正如其他人所说的那样,这不是一种有效的方法,但如果你去寻找它就会存在.
如果您想要复制的字符串长度未知,可以snprintf
在此处使用.此函数将格式化输出发送到str.它的行为类似于sprintf()
,但不会写入由str分配的更多字节.如果结果字符串长于n-1
字符,则剩余的字符将被省略.\0
除非缓冲区大小为,否则它也始终包含空终止符0
.
这将是一个替代strncpy()
或者strcpy()
,如果你真的不想使用它.但是,在字符串末尾手动添加空终止符strcpy()
始终是一种简单有效的方法.在C中,在任何已处理的字符串的末尾添加空终止符是非常正常的.
以下是使用的基本示例sprintf()
:
#include#include #include #define SIZE 1024 int main(void) { const size_t N = SIZE; char str[N]; const char *example = "Hello World"; snprintf(str, sizeof(str), "%s", example); printf("String = %s, Length = %zu\n", str, strlen(str)); return 0; }
打印出来:
String = Hello World, Length = 11
此示例显示snprintf()
复制"Hello World"
到str
,并\0
在末尾添加了终止符.
注意: strlen()
仅适用于空终止字符串,如果字符串未终止,则会导致未定义的行为.snprintf()
还需要更多错误检查,可以在手册页上找到.
正如其他人所说的那样,这不是一种有效的方法,但如果你去寻找它就会存在.