【发布时间】:2018-10-15 17:22:57
【问题描述】:
所以我的代码在 buffer[i] = envp[i] 处崩溃。
我想创建环境变量的 char**buffer,并将它们设为小写(尚未添加 putc(tolower()) 循环)。但是当我尝试制作 buffer[i] = envp[i] 时,编译器会返回这个错误:
错误:赋值从没有强制转换的指针生成整数 [-Wint-转换] 缓冲区[i] = envp[i]; ^
警告:格式“%s”需要“char *”类型的参数,但参数 2 具有“int”类型 [-Wformat=] printf("%s\n", 缓冲区[i]); ~^ ~~~~~~~~~ %d
int main(int argc, char *argv[], char * envp[])
{
int i = 0;
char *buffer = NULL;
while(envp[i])
{
i++;
}
buffer = (char *)malloc(i * 8);
for (i = 0; envp[i] != 0 ; i++)
{
buffer[i] = envp[i];
printf("%s\n", envp[i]);
printf("%s\n", buffer[i]);
}
return 0;
}
请帮忙,我一直在这里打破我的头:(。非常感谢!!!
【问题讨论】:
-
鉴于
char *buffer,你认为buffer[i]是什么? -
即使将
buffer更改为char *的序列而不是现在的char,除了来自evp[]的指针之外,没有任何内容被复制。简而言之,它是浅复制。最初您有一组指向这些字符串的指针(在evp[]中),现在您将有两个(在evp[]和buffer[]中)。我有点怀疑这对你有多大帮助。 -
@WhozCraig True 关于数组的重复。注意修复的
buffer[]仍然依赖envp[]来知道buffer[]中有多少是有效的。我希望buffer[]比NULL大 1 个元素。 -
@chux 或做一些勇敢的事情,称我为疯子,保留字符串数 除了
i或枚举envp再次.