当前位置: 首页 > 知识库问答 >
问题:

C将数组转换为字符串

党航
2023-03-14

我已经扫描ABCDEFGHIJK与fscanf成一个char数组[26]。然后我得到了ABCDEFGHIJK使用for进入另一个数组[11]。现在我需要一个ABCDEFGHIJK. mp4数组[15],以便将该文件名输入重命名函数。

除了printf、scanf之外,我对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个答案

堵彬彬
2023-03-14

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

strcat(filename,".mp4");

在你打印了没有“. mp4”的名字之后。如果你真的想使用Sprintf,那么我认为这就足够了:

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

此外,如果您希望字符串更大且大小不固定,则可以将“\0”放在字符串末尾(如果您尝试在除c以外的其他编程语言中使用字符串,则此操作可能不起作用),也可以使用上述strcat,或者您可以这样做:

memset(&filename, 0, sizeof(filename));
邵子平
2023-03-14

看起来你得到了一个char的数组。您可以简单地做到:

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

您可以阅读有关%的更多信息*s此问题中的说明符。

 类似资料:
  • 问题内容: 我正在使用Swift 3,并且需要与C API进行交互,例如,C API接受以NULL终止的字符串列表 在Swift中,API的导入方式如下 在尝试使用类型转换数百次后,我还是无法完成这项工作。即使我传递通过编译的有效指针,它也会在运行时崩溃,提示无效的内存访问(在strlen函数中)。还是关于ARC的东西? 问题答案: 您可以像如何通过使用char **参数将Swift字符串数组传递

  • 我有一个购物车php页面,在那里我显示客户端产品。在同一页中,我有一个表单,可以将客户的个人详细信息(如姓名、姓氏等)以及产品信息(如产品名称、数量等)直接发送到我的电子邮件地址。 现在,问题是,当我发送表单时,在我的电子邮件地址上,我收到了所有的信息,但没有产品细节,例如在订单电子邮件中的产品名称字段,我有ARRAY。 我看到将数组转换为字符串时出现问题,但我不知道如何转换,我尝试了几个示例,但

  • 我想优化我的代码,避免错误,我有这个功能,但我认为我可以改善和避免内存问题。 该函数的思想是接收这种样式的字符串“0123456789”并将其传递给0x01、0x23、0x45、...在无符号字符数组中。任何提示,良好的实践或改进将是非常有用的。 用法是这样的: 在函数缓冲区中结束如下:

  • 我正在使用Schembuf在带有套接字的计算机之间更改数据。要传输数据,我使用以下内容: 然而,我注意到Protobuf无法读取任何非int类型的接收数据(它将其分配给0)。果不其然,如果我不使用套接字,但试图用相同的代码片段返回消息,则会发生相同的情况: 我还指出: 那么,为什么我不能正确地将数据转换回字符串呢?如果这是一个参考问题,为什么protobuf不能读取字符数组数据或从字符数组转换的字

  • 问题内容: 我想将数组转换为。例如字符串数组是这样的: 如何将此String数组转换为ArrayList? 问题答案: 为此使用此代码,

  • 问题内容: 我有两个字符串数组键和值 将它们转换为地图的最快方法是什么?我知道我们可以遍历它们。但是,这里有实用程序吗? 问题答案: 比这快吗?