strncpy和memcpy之间的区别?

use*_*208 18 c memcpy strncpy

我如何才能获得s[7]s

我没有发现strncpy和之间的任何区别memcpy.如果我想打印输出s,以及s[7](像qwertyA),我必须在以下代码中进行哪些更改:

#include <stdio.h>
#include <stdlib.h>
int main()
{
    char s[10] = "qwerty", str[10], str1[10];
    s[7] = 'A';
    printf("%s\n",s);
    strncpy(str,s,8);
    printf("%s\n",str);
    memcpy(str1,s,8);
    printf("%s\n",str1);
    return 0;
}
/*
O/P
qwerty
qwerty
qwerty
*/
Run Code Online (Sandbox Code Playgroud)

Phi*_*ter 27

其他人指出了你的空终止问题.你需要了解空终止你明白之间的差别之前memcpystrncpy.

不同之处在于,memcpy它将复制您要求的所有N个字符,同时strncpy将复制到第一个空终止符(包括第一个)或N个字符(以较少者为准).(如果它复制少于N个字符,它将使用空字符填充其余部分.)

  • 还有另一个区别,strncpy将用0填充剩余的空格.例如,如果你执行`strncpy(a,b,255);`和a是10长,strncpy将复制这10个字符并填充剩余的240个字符0. (10认同)
  • 还要考虑:“如果源比 num 长,则不会在目标末尾隐式附加空字符。因此,在这种情况下,目标不应被视为以空结尾的 C 字符串(这样读取会溢出)。” (2认同)

mar*_*cog 8

您正在获取输出,querty因为索引7不正确(数组从0开始索引,而不是1).在索引处有一个null-terminator6来表示字符串的结尾,并且在它之后发生的任何事情都没有效果.

你需要解决两件事:

  1. 7in 更改s[7]6
  2. 添加一个null终止符 s[7]

结果将是:

char s[10] = "qwerty";
s[6] = 'A';
s[7] = 0;
Run Code Online (Sandbox Code Playgroud)

原来不工作固定工作.

至于strncpy对比的问题memcpy,区别在于strncpy为你添加一个空终止符.但是,仅当源字符串之前有一个n.那么strncpy你想在这里使用,但要非常小心大的但是.