1

について質問があり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 ファイルでしたが、別のファイルで新たに始めました。

4

3 に答える 3