【发布时间】:2018-04-28 01:42:40
【问题描述】:
我有一个关于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 文件,但我从另一个文件开始。
【问题讨论】:
-
strncpy不是正确的工具!阅读:randomascii.wordpress.com/2013/04/03/stop-using-strncpy-already