【发布时间】:2015-11-09 12:33:50
【问题描述】:
我已使用 fscanf 将“ABCDEFGHIJK”扫描到一个 char 数组 [26] 中。然后我使用“for”将“ABCDEFGHIJK”放入另一个数组[11]。现在我需要访问“ABCDEFGHIJK.mp4”数组[15],以便将该文件名输入到重命名函数中。
除了printf、scanf、for和while之外,我对C编程了解不多。
sprintf(filename, "%c%c%c%c%c%c%c%c%c%c%c.mp4", codigo[0], codigo[1], codigo[2], codigo[3], codigo[4], codigo[5], codigo[6], codigo[7], codigo[8], codigo[9], codigo[10]);
上面这段代码似乎可以工作,但我想知道是否有更简单的方法(尤其是对于更大的数组)?
澄清:我有一个 txt 文件,格式为包含不带扩展名的文件名和人类文件名。我正在尝试制作一个程序,将这些文件重命名为正确的名称,因为它们来自失败的备份。
编辑:这是完整的程序。我重命名了变量以使其更有意义,因此“codigo”现在是“idcode”。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
int i, j, k;
char value1[26], value2[70], idcode[11], filename[16], fullname[64], filenamestring[16], fullnamestring[64];
// Opening file.
FILE *nomes;
nomes = fopen("/Users/EA/Desktop/Songs/backup.txt", "rt");
if(nomes == NULL)
{
printf("Erro ao abrir backup.txt");
exit(1);
}
// Skipping beggining of file until first value.
for(i=0; i<10; i++)
{
fscanf(nomes, "%*s");
}
// Reading first value, and repetition.
while(fscanf(nomes, "%s", value1) == 1)
{
j = k = 0;
// Extracting idcode from value1.
for(i=7; i<18; i++)
{
idcode[j] = value1[i];
j++;
}
// Filling the complete filename.
sprintf(filename, "%.*s.mp4", 11, idcode);
// Reading second value, the "human" filename.
fscanf(nomes, "\n%[^\n]", value2);
for(i=6; i<70; i++)
{
fullname[k] = value2[i];
k++;
}
// Transforming filenames into strings for rename function.
strncpy(filenamestring, filename, 16);
strncpy(fullnamestring, fullname, 64);
// Renaming the files.
rename(filename, fullname);
// Skipping useless data before the next cycle.
for(i=0; i<9; i++)
{
fscanf(nomes, "%*s");
}
}
// Closing file and ending program.
fclose(nomes);
return(0);
}
【问题讨论】:
-
假设数组是
char的数组,为什么不简单的把一个字符串终止符放在最后作为字符串呢? -
例如,如果
array[15]实际上比array[16]大一点,那么char array可以在末尾包含NULL 终止符,从而使char array成为您的典型C 字符串。 -
不需要它是一个以零结尾的字符串,只需使用
%.*s。