我试图使用snprintf将字符串连接到一个void*中,但是我得到了它的分段错误。
typedef struct __buf{
void* ptr;
size_t len;
}
buf val = {NULL, 100};
int main(){
snprintf(val->ptr, val->len, "%s%s", "hello", "world");
return 0;
}
最佳答案
通过做
buf val = {NULL, 100};
val.ptr
指向NULL
,当然snprintf
将失败。你需要为它分配内存:
int main(void)
{
val.ptr = calloc(val.len, 1);
if(val.ptr == NULL)
{
fprintf(stderr, "not enough memory\n");
return 1;
}
snprintf(val->ptr, val->len, "%s%s", "hello", "world");
free(val.ptr);
return 0;
}
请注意
val->ptr = (void *)(strcat("hello","world"));
是非常错误的。
strcat
的第一个参数不能是指向字符串的指针文字,因为修改字符串文字会产生未定义的行为,而且在大多数系统上,字符串文字存储在只读内存中。
您需要一个数组,可以在其中修改数组中的字符:
char str[20] = "hello";
strcat(str, "world");
关于c - 如何在C中使用snprintf将字符串连接到结构中的void *,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49639736/