我正在用C语言编写块密码程序,似乎我的所有函数都没有返回正确的指针类型,因此我的代码甚至无法编译。
一个例子是这样的:
char *evenString(char * inText) /*takes a string of text. If it has an odd number of chars, it adds ASCII char 19 as padding.*/
{
int inputLength = strlen(inText);
char* evenText; /*pointer to character array*/
if(inputLength%2) /*If even, pad*/
{
evenText = (char*) malloc(sizeof(char) * (inputLength+2));
strcpy(evenText,inText);
evenText[inputLength] = FILLER_CHARACTER;
}
else
{
evenText = (char*) malloc(sizeof(char) * (inputLength+1));
strcpy(evenText,inText);
}
return evenText; /*which should be a char*, right?*/
}
当我在main中调用它时,调用看起来像这样:
char *plainText = evenString(inputText);
编译器会提出以下异常:
block_cypher.c:28:22: warning: initialization makes pointer from integer without a cast [enabled by default]
char *plainText = evenString(inputText);
block_cypher.c: At top level:
block_cypher.c:38:7: error: conflicting types for ‘evenString’
char *evenString(char * inText)
block_cypher.c:28:22: note: previous implicit declaration of ‘evenString’ was here
char *plainText = evenString(inputText);
block_cypher.c: In function ‘evenString’:
block_cypher.c:45:26: warning: incompatible implicit declaration of built-in function ‘malloc’ [enabled by default]
evenText = (char*) malloc(sizeof(char) * (inputLength+2));
block_cypher.c:53:26: warning: incompatible implicit declaration of built-in function ‘malloc’ [enabled by default]
evenText = (char*) malloc(sizeof(char) * (inputLength+1));
我所有的函数都是这样,它们都返回int *或char *类型的指针。我什至无法编译,所以我什至不知道从哪里开始修复此问题。任何对此的见解将不胜感激。感谢您的时间!
更新:谢谢大家!我遵循了您的所有建议:
谢谢你们!
以下错误:
block_cypher.c:28:22: note: previous implicit declaration of ‘evenString’ was here
// ^^^^^^^^
char *plainText = evenString(inputText);
表示在evenString
调用函数的位置,编译器不知道该函数的签名,这通常意味着您缺少适当的头文件。结果,编译器会推断出自己的声明(基于提供的参数),其返回类型默认为 int
:
int evenString(char* inText);
这是错误源于:
warning: initialization makes pointer from integer without a cast [enabled by default]
// ^^^^ ^^^^^^^
阅读所有错误/警告后,您似乎在首次使用该功能后就对其进行了定义。您应该在首次使用该功能之前声明该功能,或者将整个功能定义移到翻译单元的顶部(至少在第一次使用该功能之前)。evenString
那是:
block_cypher.c: At top level:
block_cypher.c:38:7: error: conflicting types for ‘evenString’
// ^^ ^^^^^^^^^^^
char *evenString(char * inText)
block_cypher.c:28:22: note: previous implicit declaration of ‘evenString’ was here
// ^^
char *plainText = evenString(inputText);
表示您已evenString(inputText);
在第28行调用了int
该函数,在该行编译器将返回类型推导为,然后才在第38行声明/定义该函数,这已经太晚了(至少没有事先声明)。
为了使其正常工作,请尝试在第28行之前添加声明:
char* evenString(char* inText);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句