相关疑难解决方法(0)

为什么要使用strncpy而不是strcpy?

编辑:我添加了示例的源代码.

我遇到了这个例子:

char source[MAX] = "123456789";
char source1[MAX] = "123456789";
char destination[MAX] = "abcdefg";
char destination1[MAX] = "abcdefg";
char *return_string;
int index = 5;

/* This is how strcpy works */
printf("destination is originally = '%s'\n", destination);
return_string = strcpy(destination, source);
printf("after strcpy, dest becomes '%s'\n\n", destination);

/* This is how strncpy works */
printf( "destination1 is originally = '%s'\n", destination1 );
return_string = strncpy( destination1, source1, index );
printf( "After strncpy, destination1 becomes '%s'\n", destination1 );
Run Code Online (Sandbox Code Playgroud)

哪个产生了这个输出: …

c buffer-overflow c89 strcpy strncpy

77
推荐指数
5
解决办法
17万
查看次数

您是否使用TR 24731'安全'功能?

ISO C委员会(ISO/IEC JTC1/SC21/WG14)已发布TR 24731-1,正在研究TR 24731-2:

TR 24731-1:C库的扩展第一部分:边界检查接口

WG14正在研究更安全的C库函数.该TR旨在通过添加具有缓冲区长度的额外参数来修改现有程序.最新草案见N1225号文件.理由是在N1173号文件中.这将成为技术报告类型2.

TR 24731-2:C库的扩展 - 第二部分:动态分配功能

WG14正在研究更安全的C库函数.该TR面向使用动态分配而不是缓冲区长度的额外参数的新程序.最新草案见N1337号文件.这将成为技术报告类型2.

问题

  • 您是否使用支持TR24731-1功能的库或编译器?
  • 如果是这样,哪个编译器或库以及哪个平台?
  • 您是否因修复代码以使用这些功能而发现任何错误?
  • 哪些功能提供最大价值?
  • 有没有提供任何价值或负值?
  • 你打算将来使用这个图书馆吗?
  • 您是否正在跟踪TR24731-2的工作?

c security coding-style tr24731

71
推荐指数
5
解决办法
1万
查看次数

标签 统计

c ×2

buffer-overflow ×1

c89 ×1

coding-style ×1

security ×1

strcpy ×1

strncpy ×1

tr24731 ×1