我有一个关于extern char **environ
. 我正在尝试制作一个 C 程序来计算环境列表的大小,将其复制到字符串数组(字符数组数组),然后使用冒泡排序按字母顺序对其进行排序。它将根据格式值打印name=value
或排序。value=name
我尝试使用strncpy
将字符串从 environ 获取到我的新数组,但字符串值显示为空。我怀疑我正在尝试以我无法使用的方式使用 environ,所以我正在寻求帮助。我试图在网上寻求帮助,但这个特定的程序非常有限。我不能使用system()
,但我在网上找到的唯一帮助告诉我编写一个程序来进行这个系统调用。(这没有帮助)。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
extern char **environ;
int main(int argc, char *argv[])
{
char **env = environ;
int i = 0;
int j = 0;
printf("Hello world!\n");
int listSZ = 0;
char temp[1024];
while(env[listSZ])
{
listSZ++;
}
printf("DEBUG: LIST SIZE = %d\n", listSZ);
char **list = malloc(listSZ * sizeof(char**));
char **sorted = malloc(listSZ * sizeof(char**));
for(i = 0; i < listSZ; i++)
{
list[i] = malloc(sizeof(env[i]) * sizeof(char)); // set the 2D Array strings to size 80, for good measure
sorted[i] = malloc(sizeof(env[i]) * sizeof(char));
}
while(env[i])
{
strncpy(list[i], env[i], sizeof(env[i]));
i++;
} // copy is empty???
for(i = 0; i < listSZ - 1; i++)
{
for(j = 0; j < sizeof(list[i]); j++)
{
if(list[i][j] > list[i+1][j])
{
strcpy(temp, list[i]);
strcpy(list[i], list[i+1]);
strcpy(list[i+1], temp);
j = sizeof(list[i]); // end loop, we resolved this specific entry
}
// else continue
}
}
这是我的代码,非常感谢帮助。为什么这个话题这么难找?是缺乏必要性吗?
编辑:粘贴错误的代码,这是同一主题的单独 .c 文件,但我从另一个文件开始。