写入变量文件名的问题

C、C++和Java语言
回复
caike
帖子: 30
注册时间: 2005-12-09 16:22
送出感谢: 0
接收感谢: 0

写入变量文件名的问题

#1

帖子 caike » 2008-02-20 8:02

请问大家一个比较傻的问题, 假如我想向目录r写入100个文件, 文件名是数字i(从1到100).

代码: 全选

	FILE *fp;
	int i;
	i = counter();//counter()来生成一个int数字
	char a=(char)i;
	char filename[]= { '\\', 'r', '\\', a,'\0' };

	printf("filename:%s\n", filename);

	fp=fopen(filename, "w");
          ..........
打印出来的文件名最后那个数字总是错的, 然后程序就报错退出了.
java程序员 linux菜鸟 C++初学者
http://ke-cai.net
头像
Strange
帖子: 1823
注册时间: 2006-05-19 9:54
来自: Shanghai
送出感谢: 2 次
接收感谢: 10 次

#2

帖子 Strange » 2008-02-20 10:03

(char)不负责帮你吧int转换成相应的字符

推测一下,你的counter()应该是返回 0, 1, 2... ...的

这样,filename[]里就是
{ '\\', 'r', '\\', 0 ,'\0' };
{ '\\', 'r', '\\', 1 ,'\0' };
{ '\\', 'r', '\\', 2 ,'\0' };
... ...

不错就怪了
ニンニク入れますか?
x60 with gentoo
caike
帖子: 30
注册时间: 2005-12-09 16:22
送出感谢: 0
接收感谢: 0

#3

帖子 caike » 2008-02-20 10:24

Strange 写了:(char)不负责帮你吧int转换成相应的字符

推测一下,你的counter()应该是返回 0, 1, 2... ...的

这样,filename[]里就是
{ '\\', 'r', '\\', 0 ,'\0' };
{ '\\', 'r', '\\', 1 ,'\0' };
{ '\\', 'r', '\\', 2 ,'\0' };
... ...

不错就怪了
可是, 要怎么转呀?
搜索了一下 "c语言 整形 转化为字符", 搜索结果是说:
用强制类型转换就可以了, 但要注意整型变量的大小不要越界 ( >=0 <=255)
int n= 30;
char ch = (char)n;
我也这样转了, 怎么还是出错呢?
java程序员 linux菜鸟 C++初学者
http://ke-cai.net
头像
Strange
帖子: 1823
注册时间: 2006-05-19 9:54
来自: Shanghai
送出感谢: 2 次
接收感谢: 10 次

#4

帖子 Strange » 2008-02-20 10:27

30又不是可显示字符
网上搜 ascii
ニンニク入れますか?
x60 with gentoo
头像
wuwud
帖子: 13
注册时间: 2007-06-06 15:49
送出感谢: 0
接收感谢: 0

#5

帖子 wuwud » 2008-02-20 11:02

try

代码: 全选

   char *_itoa(   int value,   char *string,   int radix );
头像
wuwud
帖子: 13
注册时间: 2007-06-06 15:49
送出感谢: 0
接收感谢: 0

#6

帖子 wuwud » 2008-02-20 11:14

gcc 下没有 _itoa(), so......

代码: 全选

sprintf(str,"%d",number);
用这个一样的效果。。。
caike
帖子: 30
注册时间: 2005-12-09 16:22
送出感谢: 0
接收感谢: 0

#7

帖子 caike » 2008-02-20 11:35

wuwud 写了:gcc 下没有 _itoa(), so......

代码: 全选

sprintf(str,"%d",number);
用这个一样的效果。。。
多谢wuwud, 用sprintf解决问题了.
java程序员 linux菜鸟 C++初学者
http://ke-cai.net
zarra
帖子: 89
注册时间: 2006-10-30 20:01
送出感谢: 0
接收感谢: 0

#8

帖子 zarra » 2008-02-23 12:52

如果能用c++的话 推荐stringstream 比sprintf安全

代码: 全选

#include <string>
#include <sstream>
#include <iostream> 

int main()
{
    std::stringstream stream;
    std::string result;
    int i = 1000;
    stream << i; //将int输入流
    stream >> result; //从stream中抽取前面插入的int值
    std::cout << result << std::endl; // print the string "1000"
} 


回复

回到 “C/C++/Java”