gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 23:15:05 26 4
gpt4 key购买 nike

我有以下程序:

#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 - Dev C++ strtok_s 抛出 [警告] 赋值使指针来自整数而不进行强制转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49065129/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com