| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 503 人关注过本帖
标题:编译没问题链接有问题
只看楼主 加入收藏
神话嵌入式
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2014-10-27
结帖率:58.33%
收藏
已结贴  问题点数:20 回复次数:5 
编译没问题链接有问题
下面是程序,类似的问题经常遇到,从来都没有解决过。我是菜鸟,特别想在这方面学习,谢了!
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX_COLS 20  /*所能处理的最大列号*/
#define MAX_INPUT 10000  /*每隔书入行的最大长度*/
int read_colum_numbers(int  colums[],int max);
void rearrange(char *output,char const *input,int n_columns,int const columns[]);
int main(void)
{
    int n_columns; /*进行处理的列标号*/
    int columns[MAX_COLS]; /*需要处理的列数*/
    char input[MAX_INPUT]; /*容纳输入行的数组*/
    char output[MAX_INPUT]; /*容纳输入行的数组*/
    /*读取该串列标号*/
    n_columns=read_colum_numbers(columns,MAX_COLS);
    /*读取 处理和打印剩余的输入行*/
    while(gets(input)!=NULL)
    {
        printf("Original input: %s\n",input);
        rearrange(output,input,n_columns,columns);
        printf("Rearranged line: %s\n",output);
    }  
    return EXIT_SUCCESS;
}
/*读取列标号,如果超出规定范围则不理会*/
int read_column_numbers(int columns[],int max)
{
    int num=0;
    int ch;
    /*取的列标号,如果所读取的数小于0则停止*/
    while(num<max&&scanf("%d",&columns[num])==1&&columns[num]>=0)
        num+=1;
    /*确定已经读取的标号为偶数个,因为他们是以对的形式出现的*/
    if(num%2!=0) {puts("last colum number is not paired.");exit(EXIT_FAILURE);}
    /*丢弃该行中包含最后一个数字的那部分内容*/
    while((ch=getchar()!=EOF&&ch!='\n')) return num;
}
/*处理输入行,将指定的字符连接在一起,输入行以NULL结尾*/
void rearrange(char *output,char const *input,int n_columns,int const columns[])
{
    int col; /*columns数组的下标*/
    int output_col; /*输出列计数器*/
    int len;  /*输入行的长度*/
    int nchars;
    len=strlen(input);
    /*处理没对列标号*/
    for(col=0;col<n_columns;col+=2)
    {
   
        nchars=columns[col+1]-columns[col]+1;
        /*如果输入行结束或输出数组已满,就结束任务*/
        if(columns[col]==len||output_col==MAX_INPUT-1)  break;
    }
    /*如果输出行数组空间不够,只复制可以容纳的数据*/
    strncpy(output+output_col,input+columns[col],nchars);
    output_col+=nchars;
    output[output_col]='\n';
}
这是问题。编译时都没问题,求大神指点,谢了!

--------------------Configuration: C和指针 - Win32 Debug--------------------
Compiling...
1-1.cpp
D:\vc6.0\Microsoft Visual Studio\MyProjects\C和指针\1-1.cpp(37) : warning C4715: 'read_column_numbers' : not all control paths return a value
D:\vc6.0\Microsoft Visual Studio\MyProjects\C和指针\1-1.cpp(36) : warning C4700: local variable 'ch' used without having been initialized
D:\vc6.0\Microsoft Visual Studio\MyProjects\C和指针\1-1.cpp(52) : warning C4700: local variable 'output_col' used without having been initialized
Linking...
1-1.obj : error LNK2001: unresolved external symbol "int __cdecl read_colum_numbers(int * const,int)" (?read_colum_numbers@@YAHQAHH@Z)
Debug/C和指针.exe : fatal error LNK1120: 1 unresolved externals
执行 link.exe 时出错.

C和指针.exe - 1 error(s), 0 warning(s)
搜索更多相关主题的帖子: include 
2014-10-27 22:45
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:5 
/*读取列标号,如果超出规定范围则不理会*/
int read_column_numbers(int columns[],int max)

与定义不一致


[fly]存在即是合理[/fly]
2014-10-28 17:30
soulmate1023
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:6
帖 子:256
专家分:831
注 册:2014-9-23
收藏
得分:5 
哎,小问题一定要小心呐,我现在有时也是。
2014-10-28 18:28
神话嵌入式
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2014-10-27
收藏
得分:0 
改了还是不行呀。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX_COLS 20  /*所能处理的最大列号*/
#define MAX_INPUT 10000  /*每隔书入行的最大长度*/
int read_colum_numbers(int  columns[],int max);
void rearrange(char *output,char const *input,int n_columns,int const columns[]);
int main(void)
{
    int n_columns; /*进行处理的列标号*/
    int columns[MAX_COLS]; /*需要处理的列数*/
    char input[MAX_INPUT]; /*容纳输入行的数组*/
    char output[MAX_INPUT]; /*容纳输入行的数组*/
    /*读取该串列标号*/
    n_columns=read_colum_numbers(columns,MAX_COLS);
    /*读取 处理和打印剩余的输入行*/
    while(gets(input)!=NULL)
    {
        printf("Original input: %s\n",input);
        rearrange(output,input,n_columns,columns);
        printf("Rearranged line: %s\n",output);
    }  
    return EXIT_SUCCESS;
}
/*读取列标号,如果超出规定范围则不理会*/
int read_column_numbers(int columns[],int max)
{
    int num=0;
    int ch;
    /*取的列标号,如果所读取的数小于0则停止*/
    while(num<max&&scanf("%d",&columns[num])==1&&columns[num]>=0)
        num+=1;
    /*确定已经读取的标号为偶数个,因为他们是以对的形式出现的*/
    if(num%2!=0) {puts("last colum number is not paired.");exit(EXIT_FAILURE);}
    /*丢弃该行中包含最后一个数字的那部分内容*/
    while((ch=getchar()!=EOF&&ch!='\n')) return num;
}
/*处理输入行,将指定的字符连接在一起,输入行以NULL结尾*/
void rearrange(char *output,char const *input,int n_columns,int const columns[])
{
    int col; /*columns数组的下标*/
    int output_col; /*输出列计数器*/
    int len;  /*输入行的长度*/
    int nchars;
    len=strlen(input);
    /*处理没对列标号*/
    for(col=0;col<n_columns;col+=2)
    {
   
        nchars=columns[col+1]-columns[col]+1;
        /*如果输入行结束或输出数组已满,就结束任务*/
        if(columns[col]==len||output_col==MAX_INPUT-1)  break;
   
    /*如果输出行数组空间不够,只复制可以容纳的数据*/
    strncpy(output+output_col,input+columns[col],nchars);
    output_col+=nchars;
    }
    output[output_col]='\n';
   
}
-------------------Configuration: 1-1 - Win32 Debug--------------------
Linking...
1-1.obj : error LNK2001: unresolved external symbol "int __cdecl read_colum_numbers(int * const,int)" (?read_colum_numbers@@YAHQAHH@Z)
Debug/1-1.exe : fatal error LNK1120: 1 unresolved externals
执行 link.exe 时出错.

1-1.exe - 1 error(s), 0 warning(s)
这个问题还是没解决呀!多谢了再帮我看看!谢谢了。是编译系统的问题吗?
2014-10-29 21:21
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:5 
回复 4 楼 神话嵌入式
你改什么了?

总有那身价贱的人给作业贴回复完整的代码
2014-10-30 06:42
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:5 
以下是引用神话嵌入式在2014-10-29 21:21:20的发言:

改了还是不行呀。
 
#include
#include
#include
#define MAX_COLS 20  /*所能处理的最大列号*/
#define MAX_INPUT 10000  /*每隔书入行的最大长度*/
int read_colum_numbers(int  columns[],int max);
void rearrange(char *output,char const *input,int n_columns,int const columns[]);
int main(void)
{
    int n_columns; /*进行处理的列标号*/
    int columns[MAX_COLS]; /*需要处理的列数*/
    char input[MAX_INPUT]; /*容纳输入行的数组*/
    char output[MAX_INPUT]; /*容纳输入行的数组*/
    /*读取该串列标号*/
    n_columns=read_colum_numbers(columns,MAX_COLS);
    /*读取 处理和打印剩余的输入行*/
    while(gets(input)!=NULL)
    {
        printf("Original input: %s\n",input);
        rearrange(output,input,n_columns,columns);
        printf("Rearranged line: %s\n",output);
    }   
    return EXIT_SUCCESS;
}  
/*读取列标号,如果超出规定范围则不理会*/
int read_column_numbers(int columns[],int max)
{
    int num=0;
    int ch;
    /*取的列标号,如果所读取的数小于0则停止*/
    while(num=0)
        num+=1;
    /*确定已经读取的标号为偶数个,因为他们是以对的形式出现的*/
    if(num%2!=0) {puts("last colum number is not paired.");exit(EXIT_FAILURE);}
    /*丢弃该行中包含最后一个数字的那部分内容*/
    while((ch=getchar()!=EOF&&ch!='\n')) return num;
}
/*处理输入行,将指定的字符连接在一起,输入行以NULL结尾*/
void rearrange(char *output,char const *input,int n_columns,int const columns[])
{
    int col; /*columns数组的下标*/
    int output_col; /*输出列计数器*/
    int len;  /*输入行的长度*/
    int nchars;
    len=strlen(input);
    /*处理没对列标号*/
    for(col=0;col

int read_colum_numbers(int  columns[],int max);
              ^
...
int read_column_numbers(int columns[],int max)
              ^

明显不一致 没改嘛
2014-10-30 09:53
快速回复:编译没问题链接有问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020470 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved