이 코드 섹션을 제대로 작동시키지 못했습니다. 문자 배열을 복사하여 환경 변수를 검사하기 위해 얼마나 많은 토큰을 동적으로 할당하고 저장할 것인지 계산할 수 있도록 노력하고 있습니다. 그러나 원래 문자열을 strncpy하려고하면 segfaulting 유지합니다.strncpy segfault
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