我如何才能获得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
其他人指出了你的空终止问题.你需要了解空终止你明白之间的差别之前memcpy
和strncpy
.
不同之处在于,memcpy
它将复制您要求的所有N个字符,同时strncpy
将复制到第一个空终止符(包括第一个)或N个字符(以较少者为准).(如果它复制少于N个字符,它将使用空字符填充其余部分.)
您正在获取输出,querty
因为索引7
不正确(数组从0开始索引,而不是1).在索引处有一个null-terminator6
来表示字符串的结尾,并且在它之后发生的任何事情都没有效果.
你需要解决两件事:
7
in 更改s[7]
为6
s[7]
结果将是:
char s[10] = "qwerty";
s[6] = 'A';
s[7] = 0;
Run Code Online (Sandbox Code Playgroud)
至于strncpy
对比的问题memcpy
,区别在于strncpy
为你添加一个空终止符.但是,仅当源字符串之前有一个n
.那么strncpy
你想在这里使用,但要非常小心大的但是.