我已经花了几个小时在这个程序上,并花了几个小时在线搜索我的方法的替代品,并在整个晚上一直困扰着崩溃和错误……
我有一些我想用这段代码实现的东西。 首先,我将解释我的问题,然后我将发布代码,最后我将解释我对该程序的需求。
程序只输出单个单词,连接函数什么都不做。 这似乎应该足够简单来修复……
我的第一个问题是我似乎无法使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
而不是firstOrig
, strcat
会工作。 不需要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