C使用sprintf将数组转换为字符串

时间:2015-11-09 12:33:51

标签: c arrays

我用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);
}

2 个答案:

答案 0 :(得分:0)

看起来你有一系列char&#39}。 你可以这样做:

sprintf(filename, "%.*s.mp4", 11, codigo)

您可以在this问题中详细了解%.*s说明符。

答案 1 :(得分:0)

如果您只想将格式“.mp4”附加到字符串的末尾,最简单的方法就是:

strcat(filename,".mp4");

打印出没有“.mp4”的名称后。 如果你真的想使用sprintf那么我认为这应该足够了:

sprintf(filename,"%s.mp4", codigo);

另外,如果你希望你的字符串更大而且不是固定大小,你可以在它的末尾添加“\ 0”(如果你尝试使用其他编程语言中的字符串,这可能不起作用,但c) strcat如上所述,或者你可以这样做:

memset(&filename, 0, sizeof(filename));