C2100错误:非法间接

时间:2016-01-25 07:40:57

标签: c pointers function-parameter

我不理解这个错误(C2100:非法间接)。我标记了三个实例 - 全部靠近底部。我看过网上,我知道这与我的指针有关,但是经过8个小时后,我完全迷失了。这里可能还有一些其他错误,但我甚至无法说出因为我无法编译它。请帮助&我喜欢我能理解的解释,所以我可以弄清楚我未来的错误。

// INCLUDE FILES
#include <stdio.h>
#include <string.h>

// PROGRAM CONSTANTS
#define     MAX_MSG_LEN     81      // Maximum Message Length (Including /0 Character)

// FUNCTION PROTOTYPES
void printLength(int, int);         // Function to Validate & Print Length of String
void printString(int, char);        // Function to Print the String in Reverse
void writeToFile(int, char);

// GLOBAL VARIABLES
char input[MAX_MSG_LEN];            // Input String
int maxLength = MAX_MSG_LEN - 1;    // Actual String Length (Not Including /0 Character)
char *ptr = input;                  // Character Pointer to String
int length = 0;                     // Length of Current String
int lcv = 0;                        // Loop Control Variable


void main()
{
    FILE *ifp;
    ifp = fopen("reverseString.txt", "w");

    printf("\n\nEnter a String Between 1 and %d Characters: ", maxLength);  // Prompts User to Enter a String Less Than 80
    gets(input);        // Receives the Inputted String from the User   

    length = strlen(input);     // Counts the Length of the Inputted String & Assigns the Number to the "length" Variable

    printLength(length, maxLength);
    printString(length, *ptr);
    writeToFile(length, *ptr);
}

void printLength(int length, int maxLength)
{
    if(length > maxLength)
    {
        printf("\n\nThe Maximum Length of %d Characters was Exceeded!", maxLength);
        printf("\nProgram Terminated...\n\n");
        exit(0);
    }

    printf("\n\nThe Length of the Input String was: %d\n", length);     // Prints the Length of the Inputted String
}

void printString(int length, char ptr)
{   
    for(; lcv < length; lcv++)
    {
        ptr++;
    }

    length = lcv;
    printf("\nThe String in Reverse: ");

    for(ptr--; length > 0; length--)
    {
        printf("%c", *ptr);     // HERE IS ONE INSTANCE OF C2100
        *ptr--;                 // HERE IS ONE INSTANCE OF C2100
    }

    printf("\n\n");
    return;
}

void writeToFile(int length, char ptr)
{
    FILE *ifp;
    ifp = fopen("reverseString.txt", "w");
    fprintf(ifp, "%c", *ptr);   // HERE IS ONE INSTANCE OF C2100
    fclose(ifp);
}

2 个答案:

答案 0 :(得分:3)

在您的代码中,您的语法错误。您需要更改声明和定义

  void printString(int, char);

  void printString(int, char*);

并将其称为

 printString(length, ptr);

同样适用于writeToFile()功能。

否则,使用当前代码,在printString()writeToFile()函数中,使用char ptr之类的定义,ptr不是可以取消引用的指针类型。< / p>

那就是说,

  • 永远不要使用gets(),它会遇到缓冲区溢出问题,请改用fgets()

  • 在使用返回的指针之前,请务必检查fopen()的返回值,以确保调用成功。

  • 要符合标准,void main()至少应为int main(void)

答案 1 :(得分:2)

我尝试在DevC ++ IDE上编译你的代码,我发现你的代码有3个问题。我会列出如下。

1)尝试更改函数printString()writeToFile()的声明,如Saurav Ghosh建议的那样。

2)包含stdlib.h标头以支持exit()功能,因为exit()stdlib.h的定义可用void main(){/* your code*/}

3)将int main(){/* your code */}更改为private void button1_Click(object sender, EventArgs e) { Click button2_Click(); }

我做了上述更改,并在我的机器上成功编译。