strncpy的c-第三个参数更改了我的局部变量


char activeip[11]="0123456789";
char buffer[1001];
int MAX_SIZE = 1000;
printf("MAX_SIZE %dn", MAX_SIZE);
strncpy(buffer, "string here.......  ",MAX_SIZE+1);
printf("MAX_SIZE %dn", MAX_SIZE);
strncpy(&buffer[strlen(buffer)],activeip,MAX_SIZE+1 );
printf("MAX_SIZE %dn", MAX_SIZE);
strncpy(&buffer[strlen(buffer)],"Long string here.....................................", MAX_SIZE+1);
printf("MAX_SIZE %dn", MAX_SIZE);
puts(buffer);

如您所见,我将MAX_SIZE初始化为1000。当MAX_SIZE不大于缓冲区时,MAX_SIZE变为零。代码的输出如下:

MAX_SIZE 1000
MAX_SIZE 0
MAX_SIZE 0
string here.......  0123456789L
Process finished with exit code 0

函数(strncpy(如何更改为我的局部变量(MAX_SIZE(?我的编译器是在CLion上运行的minGW谢谢你的回答

这些调用

strncpy(&buffer[strlen(buffer)],activeip,MAX_SIZE+1 );

strncpy(&buffer[strlen(buffer)],"Long string here.....................................", MAX_SIZE+1);

将第一个参数指向的数组用MAX_SIZE+1减去复制字符串的长度并用零进行追加。

根据C标准(7.23.2.4 strncpy函数(

3如果s2指向的数组是短于n的字符串字符,空字符将附加到数组中的副本由s1指向,直到总共写入了n个字符

因此,数组缓冲区之外的内存将被覆盖。您需要更改第三个参数的值,使其变小(考虑到复制字符串的长度和字符数组中使用的偏移量(。

关于;

strncpy(&buffer[strlen(buffer)],activeip,MAX_SIZE+1 );

这不是附加activeip字符串的好方法。建议:

strcat( buffer, activeip );

strncat( buffer, activeip, sizeof(buffer) - strlen buffer );

相关内容

  • 没有找到相关文章

最新更新