关于#C语言#的问题,如何解决?

关于strtok()函数的使用这里,遇到了一个不理解的问题
代码如图所示

img


点击运行后没有输出任何东西,不知道是什么情况
希望有人来解答,感激不尽!

str1 str2字符串的定义缺了[] ,修改如下:
char str1[] = "abc;def;ghi"; //char str1 = "abc;def;ghi";
char str2[] = "jkl;nno;pqr"; //char str2 = "jkl;nno;pqr";

str1和str2定义为单个字符,单个字符是用单引号而不是双引号哦!双引号定义的是字符串!

  • 这篇文章:strtok函数的基本使用 也许有你想要的答案,你可以看看
  • 除此之外, 这篇博客: C代码实现strtok函数功能中的 通过查阅源代码自己仿照写了一个strtok函数功能的代码,算法比较冗长还没有优化,但大致功能可以实现,供给大家参考。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • /******************************************************************** 
    功能:根据设置的分隔符对字符串进行分割,代码还需优化,敬请期待。。。。
    时间:2020-7-9
    ********************************************************************/
    #include <stdio.h>
    
    char *strtok_pro(char *str,const char *delim,char **last);
    char *my_strtok(char *str,const char *delim);
    
    int main(int argc,const char **argv)
    {
         char str[50] = "hello/world-zhang-HE$LLO/LLLLLL-GGGGGG";
    	 printf("%s\n",my_strtok(str,"/-")); 
    	 char *p;	  	 
         while((p = my_strtok(NULL,"/-$")) != NULL)
    	 {
    		printf("%s\n",p); 
    	 }
    	 printf("string done\n");
    	 return 0;
    }
    
    /* 
       调用函数
     */
    char *my_strtok(char *str,const char *delim)
    {
        static char *last;	                      //设置一个静态指针来保存分隔符下一个元素的地址
        return strtok_pro(str,delim,&last);
    }
    
    /* 
    根据C语言中源代码中原型,本算法分开两种情况进行判断(非NULL和NULL),
     */
    char *strtok_pro(char *str,const char *delim,char **last)
    {
    	char *cp_str;
    	const char *cp_delim;
    	if(str != NULL) //判断是否到达字符串末尾
    	{		
    		for(cp_str=str;*cp_str++ != '\0';)
    		{
    			//printf("%2c",*cp_str);
    			for(cp_delim=delim;*cp_delim++ != '\0';)
    			{
    				if(*(cp_str-1) == *(cp_delim-1))      //判断是否相等
    				{
    					*(cp_str-1) = '\0';               //把分隔符替换为'\0'
    					if(*cp_str != '\0')               //判断下一位是否为结束符
    					{
    						*last = cp_str;
    					}
    					else
    					{
    						*last = NULL;
    					} 			
    					return str;
    				}
    			} 
    		}
    		*last = NULL;
    		return NULL;
    	}
    	else if(str == NULL)
    	{
    		if(*last == NULL)                            //判断是否都同时NULL
    		{
    			return NULL;                            
    		}
    		char *mid_str = *last;
    		for(cp_str = *last;*cp_str++ != '\0';)
    		{
    			for(cp_delim = delim;*cp_delim++ != '\0';)
    			{
    				if(*(cp_str-1) == *(cp_delim-1))
    				{
    					*(cp_str-1) = '\0';
    					if(cp_str != '\0')
    					{
    						*last = cp_str;
    					}
    					else 
    					{
    						*last = NULL;
    					}
    					return mid_str;
    				}
    			}			
    		}
    		*last = NULL;       //这里需要及时标记为空,否则会一直判断不出结束
           return mid_str;		//没有找到及时返回最后一节字符串的首元素地址
    	}
    	
    }