创建一个程序,将所有环境变量以小写形式复制到新的 char** 缓冲区中并打印它们

问题描述 投票:0回答:1

我有一个任务(用于练习 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;

}
c pointers environment-variables segmentation-fault
1个回答
0
投票

char **envp = (char **) malloc(sizeof(environ))
在我的系统上分配了8个字节,这是一个指针的大小。这意味着
**envp_cpy = tolower(*temp);
是缓冲区溢出,并且它对我来说是 NULL 的段错误。

© www.soinside.com 2019 - 2024. All rights reserved.