C 将多个阵列复制到单个阵列中

C 将多个阵列复制到单个阵列中,c,arrays,C,Arrays,我目前正在尝试制作我的程序,使其文件名为人名+出生日期。我遇到的问题是只将名称复制到数组中,因为我目前有一个循环,循环15次。我不确定如何将程序限制为仅循环用户输入的次数,或在到达数组中用户输入字符的末尾时使程序停止 #include <stdio.h> #include <conio.h> #include <string.h> int main() { char firstname[16], lastname[15], filename[23];

我目前正在尝试制作我的程序,使其文件名为人名+出生日期。我遇到的问题是只将名称复制到数组中,因为我目前有一个循环,循环15次。我不确定如何将程序限制为仅循环用户输入的次数,或在到达数组中用户输入字符的末尾时使程序停止

#include <stdio.h>
#include <conio.h>
#include <string.h>

int main()
{
    char firstname[16], lastname[15], filename[23];
    int dob, i;

    printf("Please enter the first name of the player:");
    fgets(firstname, 15, stdin);
    printf("Please enter the date of birth of the player(ddmmyy): ");
    scanf("%6d", &dob);
    for(i = 0; i < 15; i++)
    {
        strncpy(filename[i], firstname[i], 15);
        if(lastname[i] == '\0');
        {
            break;
        }
    }
    for(i = 0; i < 6; i++)
    {
        strncpy(filename[i+14], dob, 6);
        if(dob[i] == '\0');
        {
            break;
        }
    }
    printf("%s", filename);
}
#包括
#包括
#包括
int main()
{
字符firstname[16],lastname[15],filename[23];
int-dob,i;
printf(“请输入玩家的名字:”);
fgets(名字,15,标准名称);
printf(“请输入球员的出生日期(ddmmyy):”;
扫描频率(“%6d”、&dob);
对于(i=0;i<15;i++)
{
strncpy(文件名[i],名字[i],15);
if(lastname[i]='\0');
{
打破
}
}
对于(i=0;i<6;i++)
{
strncpy(文件名[i+14],dob,6);
if(dob[i]='\0');
{
打破
}
}
printf(“%s”,文件名);
}

读取输入后,按照@Thecube指示对其进行消毒,并确保每个sting都以null结尾。。输入完成清理后,将firstname复制到文件名中

您只需要strncpy(filename,firstname,15)即可完成此操作。你不需要做循环


下一步是添加lastname。使用strncat(filename,lastname,15)

这里有一个稍微简单的代码版本:

#include <stdio.h>
#include <conio.h>
#include <string.h>

int main()
{
    char firstname[16], lastname[15], filename[23];
    int dob, i;
    char *ptr;

    printf("Please enter the first name of the player:");
    fgets(firstname, sizeof(firstname), stdin);
    printf("Please enter the date of birth of the player(ddmmyy): ");
    scanf("%6d", &dob);

    ptr = firstname;
    while( *ptr != '\n' ) ++ptr;
    *ptr = '\0';

    sprintf(filename, "%s%06d", firstname, dob);

    printf("%s", filename);
}

编译器告诉我,传递strncpy的参数会使来自integerI的指针在尝试将其与
firstname
一起使用时出现此错误,这在第一部分中确实有效,谢谢!现在只需要将dob添加到文件名中。Richard-将您的代码片段用如下方式括起来,例如:您只需要
strncpy(filename,firstname,15)
即可。这确实有助于提高可读性。(或者,您可以将它们放在单独的一行中,并按
4-spaces
缩进代码语法。感谢您的建议,第一部分现在已修复。您的第二步不是我要做的,而是将first+lastname添加在一起,而是尝试在firstname之后添加dateofbirth以另存为文件名。如果我没有说清楚的话谢谢。一直在尝试你的第一个版本,我有一个问题,我不能在代码中间调用char,当我的char pTR在顶部时,它不起作用。function@Thecube现在修改C语法,抱歉我使用C++编译器。编译器在输入出生日期后立即崩溃,以使其工作,但组合在firstname和dob的times@Thecube您运行的只是第一个示例,还是两者的组合?
int dob, i, n;
// ...

i = 0;
while( firstname[i] != '\n' && firstname[i] != '\0' )
{
   filename[i] = firstname[i];
   ++i;
}

for( n=100000; n>=1; n /= 10 )
{
   int digit = (dob / n) % 10;
   filename[i] = (char)('0' + digit);
   ++i;
}

if( i >= sizeof(filename) )
   return -1;
filename[i] = '\0';