gpt4 book ai didi

C...更好的插入字符串的方法?

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

我想将一个可变字符串插入到一个预先确定的字符串中....这是我目前所拥有内容的简化版本(我省略了错误检查等):

void insertPath(char *path)
{
char *cmd;
cmd = (char *)malloc(50);
strcpy(cmd, "CREATE VIRTUAL TABLE temp.tablename USING CSVFILE(");

int new_size = (strlen(cmd) + strlen(path) + 2);
cmd = (char *)realloc(cmd, new_size);

strcat(cmd, path);
strcat(cmd, ");");

// Do other stuff here and finally free(cmd);



}

有更好的方法吗?

如果不用malloc realloc就好了,但是我不想用固定长度实例化cmd变量.

(最初我认为我可以做到这一点,然后重新分配......即 char cmd[50] = "CREATE... "char *cmd = "CREATE...",但 realloc 仅适用于之前已被 malloc 处理的变量)

我能想到的唯一其他方法(但我不确定是否可行)是:

void insertPath(char *path)
{
char *cmd;
cmd = (char *)malloc(55);
strcpy(cmd, "CREATE VIRTUAL TABLE temp.tablename USING CSVFILE( %s);");

int new_size = (strlen(cmd) + strlen(path));
cmd = (char *)realloc(cmd, new_size);

sprintf(cmd, path);

// Do other stuff here and finally free(cmd);
}

最佳答案

编辑(回应评论):sizeof(char) => 1,+1 用于终止 \0

snprintf 怎么样?

size_t size = baseSize + strlen(path) + 1;
char *cmd = malloc(size);
snprintf(cmd, size, "CREATE VIRTUAL TABLE temp.tablename USING CSVFILE(%s);", path);

此处,baseSize 是“预先确定”字符串的长度,path 是您在函数中作为参数获取的可变字符串。最后,cmd 应该包含预先确定的文本,路径代替 %s

关于C...更好的插入字符串的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33416426/

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