C - 使用 strncpy() 函数后的随机字符

标签 c null integer termination

我在 C 中有以下程序:

程序的主要问题是我执行复制操作后,复制的字母后显示了一些乱码。我知道这是因为目标变量没有正确地以 null 结尾。但是,如果您仔细检查代码,就会发现我正在执行空终止。为什么问题还是存在?

最佳答案

那么,呃,你怎么看strlen()计算字符串的长度?您认为需要终止吗?

提示:确实如此。字符数组不是 C 中的字符串,除非它以 0 字符结尾。全部strlen()所做的是计算字符数,直到找到终止符,因此在逻辑上使用它来终止缓冲区以使其成为字符串是一种先有鸡还是先有蛋的情况。

你的问题是你误用了strncpy() .这是一件很容易出错的事情,因为从典型的(初学者)C 程序员的角度来看,这个函数有点疯狂。从名称上看,它根本不符合您的预期。

只要您确定 nob < sizeof destination - 1 就可以手动执行此操作:

memcpy(destination, source, nob);
destination[nob] = '\0';

关于C - 使用 strncpy() 函数后的随机字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13050987/

相关文章:

c - wait 函数和 wexitstatus 中的状态值

c - posix_memalign 的警告隐式声明

c - 字符串在 C 中意外移动

java - 如何交换两个整数包装器对象

java - 序列化变量的虚拟值

c - 循环内的函数,或函数内的循环

python - Pandas 合并用空值填充新数据框

iphone - 如何在swift3中将分钟转换为小时?

sql - 可以在 PostgreSQL 中检查数组的 IS NOT NULL 吗?

floating-point - 如何在 Elm 中将 Float 转换为 Int?