c/c++语言开发共享无法连接strtok的输出变量。 strcat和strtok

我已经花了几个小时在这个程序上,并花了几个小时在线搜索我的方法的替代品,并在整个晚上一直困扰着崩溃和错误……

我有一些我想用这段代码实现的东西。 首先,我将解释我的问题,然后我将发布代码,最后我将解释我对该程序的需求。

程序只输出单个单词,连接函数什么都不做。 这似乎应该足够简单来修复……

我的第一个问题是我似乎无法使concatenate函数工作,我使用了通用的strcat函数,它没有工作,也没有我在互联网上找到的另一个版本(这个函数在这里使用,它被称为“mystrcat” )。 我希望用字符串读取程序并删除“分隔符”以创建由原始字符串中的每个单词组成的单个字符串。 我正在尝试使用strtok和strcat函数。 如果有一个更简单或更简单的方式请尽我所有的耳朵。

另一个问题,不一定是一个问题,而是一个丑陋的混乱:主要的七行。 我更喜欢按如下方式初始化变量:char variable [amt]; 但我发现strtok的代码是使用指针,而strcat函数的代码是使用指针。 更好地理解字符串的指针和地址可能会帮助我长期。 但是,我想以任何必要的方式摆脱其中的一些线索。 我不能只有2行专用于2个变量。 当我有10个变量时,我不想要30行顶部…

#include  #include  #include  char *mystrcat(char *output, char *firstptr); int main() { char str[] = "now # is the time for all # good men to come to the # aid of their country"; char delims[] = "# "; char resultOrig[70]; //was [20]; char firstOrig[20]; //char *result = NULL, *first = NULL; char result = resultOrig; //was result = &resultOrig; char first = firstOrig; //was first = &firstOrig; first = strtok( str, delims ); while( first != NULL ) { mystrcat(resultOrig, firstOrig); printf( "%s ", first ); printf("n %s this should be the concat'd string so farn", resultOrig); first = strtok( NULL, delims ); } system("pause"); return 0; } char *mystrcat(char *resultptr, char *firstptr) { char *output = resultptr; while (*output != '') output++; while(*firstptr != '') { *output = *firstptr; output++; firstptr++; } *output = ''; return output; } 

这只是一个测试程序,但我打算将其用于文件列表/数据库。 我的文件有下划线,连字符,句号,括号和数字; 所有这些我都想设置为“分隔符”。 我打算通过一个循环,在那里我将删除一个分隔符(每个循环从_到 – 更改等等…)并创建一个单独的字符串,我可能想用空格或句点替换分隔符。 有些文件中已经有空格以及我想要“划分”的特殊字符。

我打算通过扫描文本文件来完成所有这些工作。 在文件中我也有这种格式的大小:“2,518,6452”。 我希望我可以按字母顺序或按大小,升序或降序对数据库进行排序。 这只是一些额外的信息,可能对我上面的具体问题有所帮助。

下面我列出了一些虚构的样本,说明这些名称的出现方式。 my_file(2009).ext second.File-group1.extls the.third.file-vol30.lmth

我正在关注这篇文章:关于如何使concatenate函数工作或者替换strcat和/或strtok的问题。 以及寻求帮助以整理不必要或冗余的代码。

我感谢所有帮助,甚至所有阅读我post的人。

非常感谢!

    如果你在循环中使用first而不是firstOrigstrcat会工作。 不需要mystrcat 。 可以简化为:

     #include  #include  int main() { char str[] = "now # is the time for all # good men to come to the # aid of their country"; char delims[] = "# "; char result[100] = ""; /* Original size was too small */ char* token; token = strtok(str, delims); while(token != NULL) { printf("token = '%s'n", token); strcat(result, token); token = strtok(NULL, delims); } printf("%sn", result); return 0; } 

    输出:

     token = 'now' token = 'is' token = 'the' token = 'time' token = 'for' token = 'all' token = 'good' token = 'men' token = 'to' token = 'come' token = 'to' token = 'the' token = 'aid' token = 'of' token = 'their' token = 'country' nowisthetimeforallgoodmentocometotheaidoftheircountry 

    这里有几个问题:

    您尚未初始化以下两个字符串:

     char resultOrig[20]; char firstOrig[20]; 

    你正在为他们追加角色。 将它们更改为:

     char resultOrig[20] = ""; char firstOrig[20] = ""; 

    字符数组的名称也给出了它的起始地址。 所以

     result = &resultOrig; first = &firstOrig; 

    应该:

     result = resultOrig; first = firstOrig; 

    更改

     mystrcat(resultOrig, firstOrig); 

     mystrcat(resultOrig, first); 

    也使resultOrig足够大以容纳连接,如:

     char resultOrig[100] = ""; 

      以上就是c/c++开发分享无法连接strtok的输出变量。 strcat和strtok相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/549693.html

      (0)
      上一篇 2021年1月14日
      下一篇 2021年1月14日

      精彩推荐