gpt4 book ai didi

c - 为什么 memcpy 和 sprintf 不能在此内核代码中工作?

转载 作者:太空宇宙 更新时间:2023-11-04 07:32:43 25 4
gpt4 key购买 nike

为什么下面代码中的memcpysprintf在内核代码中失败了?

static inline void my_func(){
char* src,dst;
int a =9; int b=10;

src = sprintf("a= %d b= %d",a,b);
dst = kmalloc(strlen(src)*sizeof(char) , GFP_KERNEL);
memcpy(dst, src, strlen(src));
}

最佳答案

sprintf 打印到一个字符数组中。因此,正确的用法是,

char src [MAX_CHARS];
sprintf(src, "a = %d, b = %d", a, b);

或者,您可以使用 char *src 并在调用 sprintf 之前将内存分配给 src

dest 的声明应该是,

char *src, *dest;

另一个需要注意的问题是,在memcpy(dst, src, strlen(src)) 中,strlen 返回不带终止空字符的字符串的长度。因此,如果要复制整个字符串以及空字符,则必须将 strlen 函数返回的值加 1。

dest = malloc( strlen(src) + 1 );
memcpy( dest, src, strlen(src) + 1 );

关于c - 为什么 memcpy 和 sprintf 不能在此内核代码中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12127695/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com