首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的C程序给出error : warning: implicit声明of‘palindrome’[-Wimplicit- function - declaration ]

为什么我的C程序给出error : warning: implicit声明of‘palindrome’[-Wimplicit- function - declaration ]
EN

Stack Overflow用户
提问于 2021-08-02 10:39:04
回答 2查看 571关注 0票数 1

目的:检查字符串是否为回文类型

错误:第32行警告:函数的隐式声明‘palindrome’-Wimplicit- function -declaration

代码:

代码语言:javascript
复制
int palindrome(char[] A)
{
    int i;
    for(i = 0; A[i] != '\0'; i++) { } i = i-1; // Keeping the index pointer at final element rather than null pointer.
    
    int j;
    
    for(j=0; j<i ; i--, j++)
    {
        if(A[i] != A[j])
            return 0;
        
    }
    
    return 1;
}

int main()
{
    char A[] = "madam";
    
    if(palindrome(A)) // Line of Error 
        printf("Yes, Palindrome");
    else
        printf("No!");
        
    return 0;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-08-02 10:43:03

该函数的声明

代码语言:javascript
复制
int palindrome(char[] A)

是不正确的。看起来你是说

代码语言:javascript
复制
int palindrome(char A[])

此外,函数应该像这样声明

代码语言:javascript
复制
int palindrome( const char A[])

因为传递的字符串在函数中不会改变。

并且不要在标识符的名称中全部使用大写字母。我会像这样声明这个函数

代码语言:javascript
复制
int palindrome( const char *s )

这是for循环

代码语言:javascript
复制
for(i = 0; A[i] != '\n'; i++) { }

如果传递的字符串不包含换行符'\n'‘,则可以调用未定义的行为。

再说一次,你的意思是

代码语言:javascript
复制
for(i = 0; A[i] != '\0'; i++) { }

最好将此循环替换为while循环,例如

代码语言:javascript
复制
int i = 0;
while ( A[i] != '\0' ) i++;

此外,您应该使用类型size_t,而不是使用tp确定字符串的长度的类型int,因为通常情况下,类型int可能不足以存储字符串的可能长度。

在不使用标准C字符串函数的情况下,可以定义如下演示程序中所示的函数。

代码语言:javascript
复制
#include <stdio.h>

int palindrome( const char *s )
{
    size_t first = 0;
    size_t last  = 0;
    
    while ( s[last] ) ++last;
    
    if ( first != last )
    {
        while ( first < --last && s[first] == s[last] ) ++first;
    }

    return !( first < last );
}

int main( void ) 
{
    const char *s = "A";
    
    printf( "\"%s\" is a palindrome - %s\n", s, palindrome( s ) ? "true" : "false" );
    
    s = "AA";
    
    printf( "\"%s\" is a palindrome - %s\n", s, palindrome( s ) ? "true" : "false" );
    
    s = "AB";
    
    printf( "\"%s\" is a palindrome - %s\n", s, palindrome( s ) ? "true" : "false" );
    
    s = "ABA";
    
    printf( "\"%s\" is a palindrome - %s\n", s, palindrome( s ) ? "true" : "false" );
    
    s = "ABBA";
    
    printf( "\"%s\" is a palindrome - %s\n", s, palindrome( s ) ? "true" : "false" );
    
    s = "ABCA";
    
    printf( "\"%s\" is a palindrome - %s\n", s, palindrome( s ) ? "true" : "false" );
    
    return 0;
}

程序输出为

代码语言:javascript
复制
"A" is a palindrome - true
"AA" is a palindrome - true
"AB" is a palindrome - false
"ABA" is a palindrome - true
"ABBA" is a palindrome - true
"ABCA" is a palindrome - false
票数 3
EN

Stack Overflow用户

发布于 2021-08-02 10:44:53

代码语言:javascript
复制
modify the method parameter declaration i.e. char A[] not char[] A

#include <stdio.h>
#include <string.h>

int palindrome(char A[])
{
    int i;
    for(i = 0; A[i] != '\0'; i++) { } i = i-1; // Keeping the index pointer at final element rather than null pointer.
    int j;
    
    for(j=0; j<i ; i--, j++)
    {
        if(A[i] != A[j])
            return 0;
        
    }
    
    return 1;
}

int main()
{
    char A[] = "madam";
    
    if(palindrome(A)) // Line of Error 
        printf("Yes, Palindrome");
    else
        printf("No!");
        
    return 0;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68620198

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档