相关疑难解决方法(0)

在C中拆分带分隔符的字符串

如何使用C编程语言编写一个函数来拆分和返回带有分隔符的字符串数组?

char* str = "JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC";
str_split(str,',');
Run Code Online (Sandbox Code Playgroud)

c string split

148
推荐指数
5
解决办法
58万
查看次数

您是否使用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中的strtok_r和strtok_s有什么区别?

我正在尝试在需要能够在Linux和Windows中编译的C程序中使用此函数.起初我尝试使用strtok_r,但是当我在windows上编译时,它抱怨函数不存在并且说它会假设它是一个外部函数,但后来失败了.然后我用strtok_s编译了!然后我尝试在Linux上,但现在它抱怨有一个"未定义的引用'strtok_s'".

是一个Windows唯一的功能,另一个是Linux功能??? 我能做些什么才能在两者上编译?

c linux windows compiler-errors strtok

22
推荐指数
5
解决办法
2万
查看次数

C中嵌套的strtok函数问题

我有一个像这样的字符串:

a;b;c;d;e
f;g;h;i;j
1;2;3;4;5
Run Code Online (Sandbox Code Playgroud)

我想逐个元素地解析它.我使用嵌套的strtok函数,但它只是拆分第一行并使令牌指针为null.我怎么能克服这个?这是代码:

token = strtok(str, "\n");

while(token != NULL && *token != EOF)
{
    char a[128], b[128];
    strcpy(a,token);
    strcpy(b,a);
    printf("a:%s\n",a);
    char *token2 = strtok(a,";");
    while(token2 != NULL)
    {
        printf("token2 %s\n",token2);
        token2 = strtok(NULL,";");
    }
    strcpy(token,b);
    token = strtok(NULL, "\n");
    if(token == NULL)
    {
        printf("its null");
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

token 2 a
token 2 b
token 2 c
token 2 d
token 2 e
Run Code Online (Sandbox Code Playgroud)

c nested token tokenize strtok

14
推荐指数
2
解决办法
2万
查看次数

在C中的循环中使用strtok()?

我试图在嵌套循环中使用strtok().但这并没有给我预期的结果.可能是因为他们使用相同的内存位置.我的代码形式如下: -

char *token1 = strtok(Str1, "%");
while(token1 != NULL )
{
  char *token2 = strtok(Str2, "%");
  while(token2 != NULL )
   {
      //DO SMTHING
      token2 = strtok(NULL, "%");
    }
     token1 = strtok(NULL, "%");
     // Do something more
 }
Run Code Online (Sandbox Code Playgroud)

c string strtok

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

是否有strsep()的windows变种

我正在尝试解析具有一些空参数的分隔字符串.例:

"|One|two|three||octopus|garbagecan||cartwheel||||"
Run Code Online (Sandbox Code Playgroud)

基本上我需要能够通过id拉出任何段,如果段是空的返回null.

strtok()不处理空字段,它看起来像strsep()基于*nix的系统.任何人都知道Windows是否有类似的东西?我想尝试避免必须编写一个函数来处理这个问题,如果可以的话.

c windows

3
推荐指数
1
解决办法
6955
查看次数

strtok_s 在 os x 上未定义

我正在尝试使用 C11 函数strtok_s,该函数应该在 中定义<string.h>,但是当我尝试使用它时,clang 给了我一个链接错误。编译这个程序:

#include <string.h>

int main() {
    char * buffer;
    char * state;
    rsize_t strmax = 0;
    char * fpl = strtok_s(buffer, &strmax, "\n", &state);
}
Run Code Online (Sandbox Code Playgroud)

给我这个错误:

repro.c:7:15: warning: implicit declaration of function 'strtok_s' is invalid in
  C99 [-Wimplicit-function-declaration]
    char * fpl = strtok_s(buffer, &strmax, "\n", &state);
                 ^
repro.c:7:9: warning: incompatible integer to pointer conversion initializing
  'char *' with an expression of type 'int' [-Wint-conversion]
    char * fpl = strtok_s(buffer, &strmax, "\n", &state); …
Run Code Online (Sandbox Code Playgroud)

c string macos clang tr24731

2
推荐指数
1
解决办法
947
查看次数