我一直無法讓這段代碼工作。我試圖讓一個字符數組被複制,這樣我就可以計算出有多少個令牌可以動態分配,並將它們保存到環境變量中進行檢查。但是,當我試圖壓縮原始字符串時,我會保留段落。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中找出它。任何幫助將不勝感激
讓我試試 – GFXGunblade
謝謝。欣賞它 – GFXGunblade
請注意,strncpy不_零終止目標字符串!你很少想使用這個功能。在這種情況下,strdup可能是你想要的。 另外請注意,您需要免費複製,因爲strdup爲它分配新的內存! – harald