将多个数组复制到一个数组中

标签 c arrays

我目前正在尝试制作我的程序,以便它的文件名是人名+他们的出生日期。我遇到的问题是只将名称复制到数组中,因为我目前有一个循环,它循环了 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);
}

最佳答案

这是您的代码的一个稍微简单的版本:

#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);
}

注意:sprintf() 非常强大,可以在复制firstname 的同时为您格式化dob。 (注意:sprintf() 很可能会导致缓冲区溢出,如果你不是特别小心的话。Visual studio 有一个更安全的版本 sprintf_s())

作为替代方案,如果您不想调用任何函数而宁愿手动复制字符串,您可以执行以下操作:

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';

关于将多个数组复制到一个数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34160295/

相关文章:

c - 没有得到任何输出

arrays - 如何初始化三维 ruby​​ 数组

c - sizeof float array,不同的结果,有什么解决方法吗?

java - 错误 : can only iterate over an array or an instance of java. lang.Iterable

javascript - javascript中对象与数组的内存使用和速度

c - 使用递归查找数组的最小元素

c++ - 排队的事件数量? (Win32 事件队列)

c - 从 C 中的函数返回 `struct`

c - 权限被拒绝错误 dev C++

Javascript 数组给出 NaN