当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 8 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 写入变量文件名的问题
帖子发表于 : 2008-02-20 8:02 

注册: 2005-12-09 16:22
帖子: 30
送出感谢: 0 次
接收感谢: 0 次
请问大家一个比较傻的问题, 假如我想向目录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


页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2008-02-20 10:03 
头像

注册: 2006-05-19 9:54
帖子: 1822
地址: Shanghai
送出感谢: 2
接收感谢: 11
(char)不负责帮你吧int转换成相应的字符

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

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

不错就怪了


_________________
ニンニク入れますか?
x60 with gentoo


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2008-02-20 10:24 

注册: 2005-12-09 16:22
帖子: 30
送出感谢: 0 次
接收感谢: 0 次
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


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2008-02-20 10:27 
头像

注册: 2006-05-19 9:54
帖子: 1822
地址: Shanghai
送出感谢: 2
接收感谢: 11
30又不是可显示字符
网上搜 ascii


_________________
ニンニク入れますか?
x60 with gentoo


页首
 用户资料  
 
5 楼 
 文章标题 :
帖子发表于 : 2008-02-20 11:02 
头像

注册: 2007-06-06 15:49
帖子: 13
送出感谢: 0 次
接收感谢: 0 次
try
代码:
   char *_itoa(   int value,   char *string,   int radix );


页首
 用户资料  
 
6 楼 
 文章标题 :
帖子发表于 : 2008-02-20 11:14 
头像

注册: 2007-06-06 15:49
帖子: 13
送出感谢: 0 次
接收感谢: 0 次
gcc 下没有 _itoa(), so......
代码:
sprintf(str,"%d",number);

用这个一样的效果。。。


页首
 用户资料  
 
7 楼 
 文章标题 :
帖子发表于 : 2008-02-20 11:35 

注册: 2005-12-09 16:22
帖子: 30
送出感谢: 0 次
接收感谢: 0 次
wuwud 写道:
gcc 下没有 _itoa(), so......
代码:
sprintf(str,"%d",number);

用这个一样的效果。。。


多谢wuwud, 用sprintf解决问题了.


_________________
java程序员 linux菜鸟 C++初学者
http://ke-cai.net


页首
 用户资料  
 
8 楼 
 文章标题 :
帖子发表于 : 2008-02-23 12:52 

注册: 2006-10-30 20:01
帖子: 89
送出感谢: 0 次
接收感谢: 0 次
如果能用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"
}




页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 8 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译