纯c中char*[]的处理

来源:互联网 发布:如何把mac里的照片导出 编辑:程序博客网 时间:2024/06/07 14:54

要明确的几点:

  1.以下是不行的

#include"stdio.h"
#include<Windows.h>
int main()
{
    char * a=0;
    scanf("%s",a);
    printf("%s",a);
    system("pause");
    return 0;
}

2.char a[100]={0};

   char *b[100]={0};

  此时a的类型是指向char 的指针(即:char *型),b的类型是指向char * 的指针(即使:char ** 型)

,且他们是常量指针(无法移动和修改)


3.检测字符串数组中是否有某个字符,若有,返回true,否则返回false

算法1:bool find_char(char **strings,char value)
{
    char * string=0;
    while((string=*strings++)!=NULL)
    {
        while(*string++!='\0')
        {
            if(*string==value)
            return true;
        }        
    }
    return false;
}


在主函数中:

#include<stdio.h>
#include<ctype.h>
#include<string.h>
#define MAXROW 100
#define MAXCOL 100

:bool find_char(char **strings,char value);
int main1()
{
    char* strings[MAXROW]={0};
    char string[MAXCOL]={0};
    //char** strings_str=strings;
    //char * string_str=string;
    size_t count=0;
    char a;
    printf_s("请输入字符串,以0结束\n");
    scanf("%s",string);
    while (string[0]!='0')
    {
    strings[count++]=string;
    scanf("%s",string);
    }
    strings[count]=NULL;
    /*strings[0]="sunxiaowu";
    strings[1]="xiamuyourenzhang";
    strings[2]="wokanzheni";*/
    //printf("为啥子下面一句话输入不进去");
    bool flag=find_char(strings,'e');
    (flag==true)?printf("exist"):printf("not exist");
    return 0;
}

结果有错:

   经过调试发现,字符串数组中存储的字符串里,字符串都是一样的?为什么?

 经过本人的不断查看,终于发现问题之处在于:

strings[count++]=string;这句

设置一个临时变量即可:

改为:char * tmp=new char(strlen(string)+1);

            strcpy(tmp,string);

strings[count++]=string;即可

或者直接初始化来测试:

char * strings[100]={"sunxiaowu","wokanzheni","niquekanzhefngjming"};

算法2:


0 0