我有一个任务(用于练习 c)将 envp 以小写形式复制到新的 char** 缓冲区中并打印它们。 我编写了一个程序,由于某种原因,它一直给我分段错误。
#include <ctype.h>
#include <stdlib.h>
#include <stdio.h>
int main( int argc, char **argv, char **envp)
{
int i = 0;
char **envp = (char **) malloc(sizeof(environ));
char **envp_cpy = envp;
char *temp;
for(i = 0; environ[i] != NULL; i++)
{
temp = environ[i];
while(*temp != '\0')
{
**envp_cpy = tolower(*temp);
*envp_cpy++;
*temp++;
}
*envp_cpy++;
}
for (i = 0; envp[i] != NULL; i++)
{
printf("%s\n",envp[i]);
}
free(envp);
return 0;
}
char **envp = (char **) malloc(sizeof(environ))
在我的系统上分配了8个字节,这是一个指针的大小。这意味着 **envp_cpy = tolower(*temp);
是缓冲区溢出,并且它对我来说是 NULL 的段错误。