鱼C论坛

 找回密码
 立即注册
查看: 5150|回复: 5

[已解决]warning: shadowed declaration is here 啥意思???

[复制链接]
发表于 2019-5-30 12:04:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
>"D:\gcc\bin/g++" -Os -mconsole -Wall -Wshadow -fno-common -static-libgcc -static-libstdc++ -std=gnu++11 -fpermissive  "26.c" -o "26.exe"
26.c: In function 'void spilt(char*)':
26.c:35:22: warning: declaration of 'name' shadows a global declaration [-Wshadow]
void spilt(char *name)
                      ^
26.c:7:6: warning: shadowed declaration is here [-Wshadow]
char name[30];

这俩warning啥意思???有影响么
还有为啥我输入stark,Tony没问题,输入America,Captain还是出现tony Stark??
      ^
>Exit code: 0



#include <stdio.h>
#include <string.h>
char guy1[]="50:Tony Stark";
char guy2[]="20:Peter Benjamin Parker";
char guy3[]="1500:Thor";
char guy4[]="99:Captain America";
char name[30];

void spilt(char *);
void input();
void check();
int main()
{
input();
check();
printf("/n");
       
}

// 1. user input the name function
void input(){
        int i =0;
printf("Type in a file name: names.txt\n");
printf("Enter the name of a person: ");
scanf("%s", name);
        for (i=0;i<30;i++){
                if(name[i]==44){//ASCII , = 44 spilt the name if type: Secondname ,Firstname
                        spilt(name);
                        //printf("S,F success");
                        }
                }
}

/* 2. spilt the name*/
void spilt(char *name)
{
    int count = 0;
    while((name[count] = getchar()) != ',' && name[count] != '\n')
    ++count;
    name[count] = '\0';  
}



/*3. check the input name right or not.*/
void check(){
        if((strstr(guy1, name))!= NULL ){
                printf("Tony Stark is not a pensioner.\n");
        }
        else if((strstr(guy2, name))!= NULL){
                printf("Peter Benjamin Parker is not a pensioner.\n");
        }
        else if((strstr(guy3, name))!= NULL){
                printf("Thor is a pensioner.\n");
        }
        else if((strstr(guy4, name))!= NULL){
                printf("Captain America is a pensioner.\n");
        }else{
                printf(" No record of this person.");
        }
}
最佳答案
2019-5-30 14:32:59
本帖最后由 bin554385863 于 2019-5-30 14:36 编辑
chlm007 发表于 2019-5-30 14:22
谢谢啦。所以是什么不用改喽?另外strstr()我用的对么?


strstr(guy1, name))!= NULL

如果为真,则表示name就是guy1的子串,返回name在guy1中首次出现的地址。

如果为假,则表示name不是guy1的子串。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-5-30 12:14:49 | 显示全部楼层
我想着把name 改成void spilt 中的一个变量,再设计一个*fullname全局指针,然后出现什么无法转换warning,昏啊
a5test.c: In function 'void input()':
a5test.c:31:14: warning: invalid conversion from 'char*' to 'char' [-fpermissive]
    *fullname = name;
>Exit code: 1

#include <stdio.h>
#include <string.h>
char guy1[]="50:Tony Stark";
char guy2[]="20:Peter Benjamin Parker";
char guy3[]="1500:Thor";
char guy4[]="99:Captain America";
char *fullname;

void spilt(char *);
void input();
void check();
int main()
{
input();
check();
printf("/n");
       
}

// 1. user input the name function
void input(){
        int i =0;
        char name[30];
printf("Type in a file name: names.txt\n");
printf("Enter the name of a person: ");
scanf("%s", name);
fullname = name;
        for (i=0;i<30;i++){
                if(name[i]==44){//ASCII , = 44 spilt the name if type: Secondname ,Firstname
                        spilt(name);
                        *fullname = name;
                        //printf("S,F success");
                        }
                }
}

/* 2. spilt the name*/
void spilt(char *name)
{
    int count = 0;
    while((name[count] = getchar()) != ',' && name[count] != '\n')
    ++count;
    name[count] = '\0';  
}



/*3. check the input name right or not.*/
void check(){
        if((strstr(guy1, fullname))!= NULL ){
                printf("Tony Stark is not a pensioner.\n");
        }
        else if((strstr(guy2, fullname))!= NULL){
                printf("Peter Benjamin Parker is not a pensioner.\n");
        }
        else if((strstr(guy3, fullname))!= NULL){
                printf("Thor is a pensioner.\n");
        }
        else if((strstr(guy4, fullname))!= NULL){
                printf("Captain America is a pensioner.\n");
        }else{
                printf(" No record of this person.");
        }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-30 12:16:00 | 显示全部楼层
>"D:\gcc\bin/g++" -Os -mconsole -Wall -Wshadow -fno-common -static-libgcc -static-libstdc++ -std=gnu++11 -fpermissive  "26.c" -o "26.exe"
26.c: In function 'void spilt(char*)':
26.c:35:22: warning: declaration of 'name' shadows a global declaration [-Wshadow]//警告: name的隐藏声明是全局声明
void spilt(char *name)
                      ^
26.c:7:6: warning: shadowed(隐藏) declaration(声明) is here [-Wshadow]
隐藏声明在这里
char name[30];
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-30 12:22:17 | 显示全部楼层
chlm007 发表于 2019-5-30 12:14
我想着把name 改成void spilt 中的一个变量,再设计一个*fullname全局指针,然后出现什么无法转换warning, ...

你的变量name是默认全局变量,怎么能变成局部变量?
而且构造函数的参数只是个形式参数,两者本质都不一样,怎么转换呢.
兄弟!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-30 14:22:28 | 显示全部楼层
bin554385863 发表于 2019-5-30 12:22
你的变量name是默认全局变量,怎么能变成局部变量?
而且构造函数的参数只是个形式参数,两者本质都不一样, ...

谢谢啦。所以是什么不用改喽?另外strstr()我用的对么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-30 14:32:59 From FishC Mobile | 显示全部楼层    本楼为最佳答案   
本帖最后由 bin554385863 于 2019-5-30 14:36 编辑
chlm007 发表于 2019-5-30 14:22
谢谢啦。所以是什么不用改喽?另外strstr()我用的对么?


strstr(guy1, name))!= NULL

如果为真,则表示name就是guy1的子串,返回name在guy1中首次出现的地址。

如果为假,则表示name不是guy1的子串。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-20 18:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表