以下是引用风生钧起在2011-8-2 00:20:21的发言:
你 程序怎么有个错误
你 程序怎么有个错误
我的是VS2010编译器,使用的_strrev()是安全函数,标准C是strrev()。第一个头文件是你们不需要的。
授人以渔,不授人以鱼。
#include "stdafx.h" #include <stdio.h> #include <string.h> char* TransForm(char cBuffer[], int iVar); void main(void) { char cString[1024]; // Hello,world!的翻版 // 原先是这样写的 // char cString[] = "Hello,world!"; // 即printf("%s\n", cString); // 套上面的格式, 成下面这样, 这种套换方式, 是程序语言的基本用法 printf("%s\n", TransForm(cString, 1234567)); printf("%s\n", TransForm(cString, 0)); printf("%s\n", TransForm(cString, -1234567)); // 注意与下面变换对比: // printf("%d\n", 1234567); // 这样就可以猜到printf()内部的动作了 // 如果要回避printf(), 可以 // puts(TransForm(cString, 1234567)); // 不妨比较前后两种版本(printf()版和puts()版)EXE文件的大小 } char* TransForm(char cBuffer[], int iVar) { int iCount; // 千位计数器 bool lNegative; // 是否负数的标志 char* p = cBuffer; // 记录缓冲区的起始地址(p是动指针, cBuffer是不动的, 用于返回) if (iVar == 0) { // 如果传入的数值为0直接返回"0" *p++ = '0'; // 数组版本可写成cBuffer[0] = '0'; *p = '\0'; // 数组版本可写成cBuffer[1] = '\0'; return cBuffer; } lNegative = (iVar < 0); if (lNegative) { iVar = -iVar; // 取正数计算 } iCount = 0; while (iVar > 0) { if (iCount < 3) { iCount++; } else { *p++ = ','; iCount = 1; } *p++ = '0' + (iVar % 10); // 数组版本应建立一个下标计数器写入数据 iVar /= 10; } if (lNegative) // 补回负数的标识 { *p++ = '-'; } *p = '\0'; // 字符串结束符 return _strrev(cBuffer); // 反转缓冲区之后返回 } // 其实可以不返回缓冲区的地址, 改为返回字符串的字符数, 为0时失败.