我不理解这个错误(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);
}
答案 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();
}
我做了上述更改,并在我的机器上成功编译。