将子数组复制到另一个数组中

标签 c arrays

#include<stdio.h>
int copy(char d[],char e[],int n);
int main(void)
{

    char a[20]="Nice to meet you";
    char b[10];
    copy(a+5,b,4);
    return 0;
}

int copy(char d[],char e[],int n)
{
 for(int i=0;i<n;i++)
   {
    e[i]=d[i];
   }
 printf("%s\n",e);
 return 0;
}

这里d指向a+5e指向b。在这里,我理解输出将是“to m”。 我的问题是:在 copy 函数中,如果我初始化 i1 运行到 n-1 而不是 0n-1,为什么它没有给出所需的输出? 我预计新输出为“o m”。

最佳答案

如果您在copy中使用i1循环到n - 1,那么在调用之后main 中的 >copy(a + 5, b, 4)b[0] 仍将未初始化,因此访问它是未定义的行为(您也不确保 b 中的字符串以 '\0' 结尾)。即使没有,它仍然存在;要让它打印“o m”,您必须从 b + 1 开始读取,或者在 copy 中进行赋值,例如 e[i - 1] = d [i] (如果您打算将其视为一个字符串,请确保将其以 nul 终止,或者将其视为以 nul 终止的字符串将使其从末尾读入未初始化的区域,类似地调用未定义的行为)。

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

相关文章:

c++ - 如何将结构从 C++ 传递给 C?

c - 无法定位 "dereferencing pointer to incomplete type"错误的来源

c - 如何从控制台获取密码字符,但将它们显示为星号

php - 2个数组更新mysql查询。 1 个数组包含要更新的值,其他数组包含要更新的唯一 ID

arrays - 在 Swift 中的数组中过滤字典

c++ - 具有不同类型的CUDA每线程阵列

python - Numpy 数组条件匹配

c - 如何在 copy_to_user(struct *file, const char __user *buf, size_t len, loff_t *off_t ) 时摆脱警告

c - 用于求幂的 SIMD 代码

python - 多维ndarray集合运算