我试图通过for循环增加一个计数器来打开不同的文件,然后将该计数器附加到要打开的文件名,但我仍然坚持如何使用strcat来执行此操作。如果我理解正确,strcat需要2个字符串,但我的计数器是一个int。我怎样才能使它成为一个字符串?
for(a = 1; a < 58; a++) {
FILE* inFile;
int i;
char filename[81];
strcpy(filename, "./speeches/speech");
strcat(filename, a);
strcat(filename, ".txt");
由于a是int,因此绝对不起作用。当我尝试将它转换为char时,因为从1开始并且转到57,我得到所有错误的值,因为1处的char实际上不是数字1 ..我被卡住了。
答案 0 :(得分:8)
您不能将整数转换为字符串,这在C中是不可能的。
您需要使用显式格式化函数从整数构造字符串。我最喜欢的是snprintf()
。
一旦你意识到这一点,你也可以在一次调用中格式化整个文件名,并且根本不需要使用strcat()
(性能相当差):
snprintf(filename, sizeof filename, "./speeches/speech%d", a);
将在filename
中创建一个字符串,该字符串是通过将整数a
的十进制表示附加到字符串而构造的。与printf()
一样,格式化字符串中的%d
告诉snprintf()
要插入的数字。你可以用例如%03d
获得零填充三位数格式,依此类推。它非常强大。
答案 1 :(得分:3)
你可以使用一个语句,
snprintf(filename,sizeof(filename),"./speeches/speech%d.txt",a);
答案 2 :(得分:2)
你对strcat函数是正确的。它只适用于字符串。
您可以使用'sprintf'功能。您对以下代码的修改:
char append[2]; //New variable
for(a = 1; a < 58; a++) {
FILE* inFile;
int i;
char filename[81];
strcpy(filename, "./speeches/speech");
sprintf(append,"%d",a); // put the int into a string
strcat(filename, append); // modified to append string
strcat(filename, ".txt");