要避免使用strcpy()函数中的NUL终止字符进行堆栈破坏,可以使用strncpy()函数代替。以下是一个代码示例:
#include
#include
int main() {
char src[10] = "Hello";
char dest[5];
strncpy(dest, src, sizeof(dest) - 1); // 将src复制到dest中
dest[sizeof(dest) - 1] = '\0'; // 手动添加NUL终止字符
printf("src: %s\n", src);
printf("dest: %s\n", dest);
return 0;
}
在上面的示例中,我们使用了strncpy()函数,它允许我们指定要复制的最大字节数。我们将dest的大小减去1,是为了确保有空间放置NUL终止字符。然后,我们手动将NUL终止字符添加到dest的最后一个位置上。
这样,即使src的长度大于dest的大小,strncpy()函数也不会导致堆栈破坏。