c之Dev C++ strtok_s 抛出 [警告] 赋值使指针来自整数而不进行强制转换

tuyile006 阅读:94 2025-06-02 22:19:02 评论:0

我有以下程序:

#include <string.h> 
#include <stdio.h> 
#include <stdlib.h> 
 
int main(int argc, char *argv[])  
{ 
   char *tp = NULL, *cp = NULL, *next_token = NULL; 
   char TokenListe[] = "Hello,I Am,1"; 
 
   tp = strtok_s(TokenListe, ", ", &next_token); 
 
   printf(tp); 
   return 0; 
} 

当我使用 Visual Studio 2015 编译它时,它会编译,没有任何警告。 但是当我使用 Dev C++ 5.11 编译它时,我在第 10 行收到以下警告:

[Warning] assignment makes pointer from integer without a cast

有什么解决方案可以解决该警告吗?

请您参考如下方法:

自 C11 起,strtok_s 现在是标准 C,是可选“边界检查接口(interface)”(附录 K)的一部分。编译器不需要支持它。

但如果他们这样做,格式是这样的(C11 K.3.7.3.1):

#define __STDC_WANT_LIB_EXT1__ 1 
#include <string.h> 
 
char *strtok_s(char * restrict s1, 
               rsize_t * restrict s1max, 
               const char * restrict s2, 
               char ** restrict ptr); 

任何其他格式都是非标准垃圾,不应使用,包括 Microsoft strtok_s .

Dev C++ 不再维护,因此仅包含非常旧版本的 gcc。它不支持 C11,但据我所知,新版本的 gcc + 库也不支持 C11 边界检查接口(interface)。 Visual Studio 是一个非一致性编译器,不能用于编译标准 C。一般来说,我建议不要使用这些编译器,而是更新到新版本的 gcc(例如 Codeblocks with Mingw)。

摘要:strtok_s 不能以合理的方式使用。请改用 strtok。只需确保涉及的所有缓冲区足够大并且不会溢出。对于多线程程序,根本不要使用 strtok


标签:C++
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号