簡體   English   中英

C使用sprintf將數組轉換為字符串

[英]C Transforming array into string using sprintf

我已經用fscanf將“ ABCDEFGHIJK”掃描到一個char數組中[26]。 然后我將“ for”的“ ABCDEFGHIJK”放入另一個數組[11]。 現在,我需要進入“ ABCDEFGHIJK.mp4”數組[15],以便將該文件名輸入重命名函數。

除了printf,scanf和for一會兒,我對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文件,格式為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數組。 您可以簡單地執行以下操作:

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

您可以在問題中了解更多有關%.*s指定符的信息。

如果您只想在字符串的末尾附加格式“ .mp4”,則最簡單的方法是:

strcat(filename,".mp4");

在您打印不帶“ .mp4”的名稱之后。 如果您真的想使用sprintf,那么我認為這就足夠了:

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

另外,如果您希望字符串更大且不固定大小,則可以在字符串的末尾加上“ \\ 0”(如果您嘗試使用其他編程語言的字符串(c)則可能不起作用) ,或者您可以這樣做:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM