3

宿題からすべてのタブを自動的に消去し、それらを 4 つのスペースに置き換えることができるように、小さな C プログラムを作成しました。次の関数を使用して、文字配列でタブを見つけます-

char * tabFinder(char * fileString,int * nonNullItems)
{
    int numElements = 0;
    int run = 1;
    while(run)
    {
        while(fileString[numElements] != '\t' &&
              fileString[numElements] != '\0')
            numElements++;

        if(fileString[numElements] == '\t')
        {
            fileString = tabDestroyer(fileString,&numElements,nonNullItems);
            *nonNullItems = *nonNullItems + 3;
        } else run = 0;

    }
    fileString[*nonNullItems + 1] = '\0';
    return fileString;
}

タブが見つかるたびに、次のような置換関数 tabDestroyer に渡します -

char * tabDestroyer(char * fileString, int * indexOfTab,int * currentItems)
{
    char * tempString = malloc(*currentItems + 3);
    int index = 0,tempIndex;;

    while(index < *indexOfTab)
    {
        tempString[index] = fileString[index];
        index++;
    }   

    tempString[index++] = " ";

    tempString[index++] = " ";

    tempString[index++] = " ";

    tempString[index++] = " ";


    *currentItems = *currentItems + 3;

    while(index < *currentItems)
    {
        tempString[index] = fileString[index - 3];
        index++;
    }

    return tempString;
}

タブを正常に見つけて置き換えますが、タブを置き換えるものに問題があります。

たとえば、ファイルから読み取った文字列は次のようになります (先頭にタブがあるふりをします) -

        int i, numHuge, rowCount = 0;

これに変わります -

FFFFint i, numHuge, rowCount = 0;

なぜこれが考えられるのでしょうか?

4

1 に答える 1

2
char * tempString;
tempString[index++] = " ";
                      ^ ^

まず、一重引用符を使用します' '

于 2013-01-08T19:22:57.747 に答える