编程两个小问题,C语言中如何读取一行字符串的问题和VS2008中调试出错一个问题

问题一:

经常在链接是报link2001错误,其中一般是函数体没有定义错误。但是排除以上简单的外,还有一种如下无法解析系统文件中的函数定义。如下:

LINK : warning LNK4098: 默认库“LIBCMT”与其他库的使用冲突;请使用 /NODEFAULTLIB:library
libcpmtd.lib(cerr.obj) : error LNK2001: 无法解析的外部符号 __CrtDbgReportW
libcpmtd.lib(stdthrow.obj) : error LNK2001: 无法解析的外部符号 __CrtDbgReportW
。。。。。。
libcpmtd.lib(_tolower.obj) : error LNK2019: 无法解析的外部符号 __calloc_dbg,该符号在函数 __Getctype 中被引用

像这种情况,可以推测运用了错误的运行库包。

在一程序中使用不同类型的运行时库或使用调试和非调试版本的运行时库,则将收到此链接错误。

例如,编译一个文件以使用一种运行时库,而编译另一个文件以使用另一种运行时库(例如单线程运行时库对多线程运行时库),试图链接它们,则将得到此警告。应将所有源文件编译为使用同一运行时库。

其实就是调正编译器选项参数:/MD、/MT   和   /LD

在vc9中,在“配置属性-->C/C++-->代码生成-->运行时库”中将“多线程(/MT)”统一改为“多线程调试(/MTd)”即可。

 

问题二 :

 

读取一行字符的函数
C语言中的fgets(),其中fgets读取的字符串中会有转行符。如果有需要,在字符串数组中要把这个转行符去掉。str[lstrlenA(str) -1] = 0x00; 即可!!!
C++中类ifstream的子函数getline(),不过这个不好用,没有fgets好用,而且有特殊字符时候getline()会自动退出.

windows自带的CreateFile和ReadFile两个API是没有读取一行数据的功能的,要自己对字符串进行分析.

写文件的时候fputs和fwrite是不会写一行的,只会照原字符串输出到文件中,如果有必要,我们要自己在字符串的末尾自己添加一个转行符。

 



你可能感兴趣的:(语言,编程,c,多线程,编译器,api)