以下是引用风生钧起在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时失败.
