我试图使用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/

10-17 00:22