当前位置:  开发笔记 > 编程语言 > 正文

strncpy()的最佳替代方法是什么?

如何解决《strncpy()的最佳替代方法是什么?》经验,为你挑选了1个好方法。

该函数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()还需要更多错误检查,可以在手册页上找到.

正如其他人所说的那样,这不是一种有效的方法,但如果你去寻找它就会存在.



1> RoadRunner..:

如果您想要复制的字符串长度未知,可以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非常低效.如果您只想使用它来复制字符串,那么您就是在浪费资源.
推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有