strtok无法正确分割字符串

caha11

当我将“ / usr / bin:/ bin:/ usr / sbin:/ sbin:/ usr / local / bin”传递给我的函数时,当我打印每个令牌时,我只会得到3个输出(而不是5个)。检查100次后,我看不到任何问题。但是每次只打印3个输出。

/ usr / bin

/箱

/ u / usr / bin

(空值)

char** tokenised(char* directories) {
    char** directoryArray = malloc(1000*sizeof(char*));
    char *token;
    int i = 0;

     //First token
     token = strtok(directories, ":");

     while(token != NULL) 
     {
         directoryArray[i] = strdup(token);
         token = strtok(NULL, ":");
         i++;
     }

     int j = 0; 
     while(directoryArray[j] != NULL) {
          printf("%s\n", directoryArray[j]);
          j++;
     }
     return directoryArray;
}

调用标记化的函数,它有问题

  int searchForFile(int argc, char *argv[]) {
     char* fileName = argv[0];
     char* pathBuffer = malloc(sizeof(PATH)+1);
     strcpy(pathBuffer, PATH);

     int i = 0;
     printf("%s\n", PATH);

     char** directoryArray = tokenised(pathBuffer);
     printf("%s\n", directoryArray[4]);

     while(directoryArray[i] != NULL) {
         printf("%i\n", i);
         printf("Searching directory: '%s'\n", directoryArray[i]);
         //Form an address out 2 strings
              char *address =   malloc(sizeof(char)*strlen(directoryArray[i])+sizeof(char)*strlen(fileName)+1*sizeof(char));
          strcpy(address, directoryArray[i]);
          strcat(address, "/");
          strcat(address, fileName);
          argv[0] = address;
          if(execute(argc, argv) == 0) {
              return 0;
          }
    i++;
  }
  printf("Search for file: '%s' failed.", fileName);
  return 1;
  } 
谢尔盖·卡里尼琴科(Sergey Kalinichenko)

问题在于您的制作方式pathBuffer根据您的评论,PATH是一个指针。因此,通话

char* pathBuffer = malloc(sizeof(PATH)+1);
strcpy(pathBuffer, PATH);

为一个指针加一个字节分配内存,而不是为PATH指针的内容分配内存将长输入字符串复制到此短缓冲区中会导致未定义的行为。字符串尾部的内存最有可能与其他一些数据结构共享,从而导致字符串在strtok开始处理之前被截断您可以通过directoriestokenised()函数开始处打印字符串来确认这一点

由于您strdup在其他地方使用,因此将上述几行更改为

char* pathBuffer = strdup(PATH);

将解决问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

JavaScript无法正确分割字符串

来自分类Dev

用strtok()分割字符串出错

来自分类Dev

无法使用Java正确分割字符串

来自分类Dev

用strtok分割字符串,然后保存错误

来自分类Dev

C-使用strtok用管道分割字符串

来自分类Dev

无法读取由strtok函数生成的字符串

来自分类Dev

无法在Java中分割字符串

来自分类Dev

字符串变量无法正确打印

来自分类Dev

字符串文字无法正确打印

来自分类Dev

strpos无法正确搜索字符串

来自分类Dev

C - 使用 strtok 通过分隔符“/”分割字符串“mv <from> <to>”

来自分类Dev

在UNIX shell中正确分割字符串

来自分类Dev

如何正确分割代码字符串

来自分类Dev

如何使用C#正确分割字符串数组

来自分类Dev

如何正确分割代码字符串

来自分类Dev

如何使用C#正确分割字符串数组

来自分类Dev

无法按字符分割数组中的字符串

来自分类Dev

分割字符串

来自分类Dev

为什么 strtok 不能正确分隔这个字符串?C

来自分类Dev

strtok无法按预期方式工作,无法拆分字符串

来自分类Dev

字符串令牌strtok函数逻辑

来自分类Dev

用strtok分隔字符串

来自分类Dev

在C strtok()中拆分字符串

来自分类Dev

无法使用\ n分割从char数组创建的字符串

来自分类Dev

摆动:Malayalam字符串无法在JFrame中正确呈现

来自分类Dev

为什么Node无法正确转义字符串?

来自分类Dev

Qt在Linux中无法正确读取字符串

来自分类Dev

MarkLogic中无法正确分析字符串

来自分类Dev

程序无法正确读取字符串