每当环境变量的值大于此方法中的键时,我就会出现缓冲区溢出。Target 是为令牌动态分配的二维数组的一部分。每当我用比它长的值替换作为环境变量的标记时,它都会流入下一个标记。我尝试添加一个 realloc 来尝试修复它,但它不起作用或导致段错误。
如果有人有任何建议或可以指出我忽略的东西,我将不胜感激,因为我有一种感觉,当我发现它时我会踢自己。
方法是:
void envReplace(ENV *evlist, char *Target)
{
if (Target[0] == '@')
{
memmove(Target, Target+1, strlen(Target));
for(q = 0; q<16; q++)
{
if(evlist[q].envVariable!=NULL)
{
if(strcmp(Target, evlist[q].envVariable)==0)
{
//this is where I'd add the realloc as realloc(Target, strlen(evlist[q].Value))
strcpy(Target, evlist[q].Value);
return;
}
}
}
printf("Variable not found\n");
}
else
{
printf("A value that didn't start with @ was an argument\n");
return;
}
}
ENV的数据结构为:
typedef struct envStorage
{
char *envVariable;
char *Value;
}ENV;