gpt4 book ai didi

c - strncpy 段错误

转载 作者:行者123 更新时间:2023-12-04 10:34:18 24 4
gpt4 key购买 nike

我一直无法让这部分代码正常工作。我试图获取一个要复制的字符数组,这样我就可以计算出有多少 token 可以动态分配并保存它们以供检查环境变量。但是,当它尝试对原始字符串进行 strncpy 时,我一直出现段错误。

    void echo(char *str1)
{
char *token, *temp;
char *saveptr1;
int j, i, k, counter;
char *copy;

strncpy(copy, str1, 80);

const char *delim = " ";
i = strlen(copy);

for(j = 0; j < i; j++, copy = NULL)
{
token = strtok_r(copy, delim, &saveptr1);
counter++;
if(token == NULL)
{
counter--;
break;
}
}

// initialize token array for echo
char *tokAr[counter];
for(j = 0; j < counter; j++)
tokAr[j] = malloc(80*sizeof(char));

for(j = 0, k = 0; j < i; j++, str1 = NULL)
{
tokAr[k] = strtok_r(str1, delim, &saveptr1);
if( tokAr[k] != NULL)
{
if(strchr(tokAr[k], 36) != NULL)
{
temp = enviro(tokAr[k]);
printf("%s ", temp);
}
else
printf("%s ", tokAr[k]);
}
else
break;
}

for(k = 0; k < counter; k++)
free(tokAr[k]);
}

char* enviro(char *ret)
{
char *copy, *expand, *saveptr;
const char *delim = "$";
strcpy(copy, ret);
expand = strtok_r(copy, delim, &saveptr);

return getenv(expand);
}

我知道这与我如何复制传入的 str1 字符数组有关,但我无法从 gdb 中弄清楚。非常感谢任何帮助

最佳答案

您还没有为复制分配内存。

char *copy;
strncpy(copy, str1, 80);

如果不需要完整的 81 个字符,请尝试 mallocstrdup

copy = malloc(81);
strncpy(copy, str1, 80);

/* Or strdup. */
copy = strdup(str1);

关于c - strncpy 段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7551624/

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