看似小事,却极易写错
来源:互联网 发布:linux限制ip访问次数 编辑:程序博客网 时间:2024/06/05 10:19
今天写个txt文章转换为html段落的小代码,结果一个地方搞了好一会才发现是哪个地方写错了:
#include <string>#include <stdio.h>void main(int argc, char** argv){if(argc < 2){printf("file name failed!!!\n");char k;scanf("%c", &k);return;}FILE * fp = fopen(argv[1], "r");if(fp == NULL){printf("file open failed!!!\n");char k;scanf("%c", &k);return;}fseek(fp, 0, SEEK_END);long fszie = ftell(fp);fseek(fp, 0, SEEK_SET);if(fszie == -1){printf("file size failed!!!\n");char k;scanf("%c", &k);return;}char* sz_str = new char[fszie+1];sz_str[fszie] = '\0';if(fread(sz_str, 1, fszie, fp) <= 0){printf("file size failed!!!\n");char k;scanf("%c", &k);return;}std::string text = sz_str;std::string output_str = "<p>";int i = 0;while(sz_str[i] != '\0'){while(sz_str[i] != '\0')//换行符 break{if(sz_str[i] == '\r')//换行符 break{if(sz_str[i] != '\n'){printf("file find \\r but not find \\n failed!!!\n");char k;scanf("%c", &k);return;}break;}else if(sz_str[i] == '\n')//换行符 breakbreak;//处理空格和tabif(sz_str[i] == ' ')output_str += " ";else if(sz_str[i] == '\t')output_str += " ";else if(sz_str[i] != 0xcd)output_str += sz_str[i];i++;}if(sz_str[i] == '\0')break;else //碰到换行符了{output_str += "</br>";i++;}}output_str += "</p>";fclose(fp);fp = fopen(argv[1], "w");if(fp == NULL){printf("file open failed!!!\n");char k;scanf("%c", &k);return;}fwrite(output_str.c_str(), output_str.size(), 1, fp);fclose(fp);}就错在了
else if(sz_str[i] != 0xcd)这一行 我用调试器看了变量值明明就是0xcd啊,那是为何呢?后来理了理头绪,改为 else if(sz_str[i] != (char)0xcd) 就好了
因为之前代码表达式 由char提升为int ,结果sz_str[i]提升为int会变成一个负数, 而0xcd会变成 一个小整数。主要当时把他们看成原始二级制了(无符号)如果改为:
else if((unsigned char)sz_str[i] != (unsigned char)0xcd) 也是可以的
0 0
- 看似小事,却极易写错
- 那些看似小并非小的小事
- 小事
- 小事
- 小事
- 小事
- 小事
- 小事
- 看似结束
- 看似胡言乱语
- 心情小事
- 一件小事
- 一件小事
- 琐碎小事
- 一件小事
- 汗颜小事
- 一件小事
- 一件小事
- 举例分析Linux动态库和静态库
- 【蓝桥杯题目分析】2014年第五届——第三题:李白打酒
- 欢迎使用CSDN-markdown编辑器
- 数据结构学习——二叉查找树ADT(程序化)
- when I was upset
- 看似小事,却极易写错
- [Qt]界面效果setWindowFlags()
- hdu 1029
- 最小树-克鲁斯卡尔
- Web挖掘技术可实现应用目标
- SQLServer 数据加密解密:在多个服务器实例中创建相同对称密钥(三)
- 《数据结构编程实验》 4.2.1Adding Reversed Numbers
- 【HDU】 2883 kebab(最大流+时间段离散化)
- 在C/C++计算机语言中动态分配二维数组