要明确的几点:
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: