について質問がありextern char **environ
ます。環境リストのサイズをカウントし、それを文字列の配列 (文字の配列の配列) にコピーし、バブル ソートでアルファベット順に並べ替える C プログラムを作成しようとしています。フォーマット値に応じて、印刷name=value
または順序付けされます。value=name
strncpy
環境から新しい配列に文字列を取得するために使用しようとしましたが、文字列の値は空になります。できない方法で 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 ファイルでしたが、別のファイルで新たに始めました。