指针数组的一个简单例子执行出错了
本帖最后由 yzhkpli 于 2024-10-11 16:00 编辑#include <stdio.h>
#include <stdlib.h>
//自定义的计算字符串的长度
int my_strlen(char *string){
int length=0;
while(*string!='\0'){
length++;
string++;
}
return length;
}
int find_char(char **strings,char value);
int main(void){
char *name="Bill Gates";
int length=strlen(name);
char *strs;
char *s1="A string";
char *s2="Another";
char *s3="Third";
char *s4="Last";
char *s5="";
strs=s1;
strs=s2;
strs=s3;
strs=s4;
strs=s5;
printf("name points to string length :%d\n",length);//10
printf("name points to string length :%s,%d\n",name,my_strlen(name));
//int x1=find_char(strs,'K');
//printf("x1:%d",x1);
if(find_char(strs,'K')){
printf("找到了\n");
}else{
printf("找不到\n");
}
system("pause");
return 0;
}
int find_char(char **strings,char value){
char *string;
while((string=*strings++)!=NULL){
while(*string++!='\0'){
if(*string==value){
return 1;
}
//string++;
}
}
return 0;
}
这段代码的诡异之处在于,如果删掉与指针数组无关的,也就是仅仅下面的部分
#include <stdio.h>
#include <stdlib.h>
int find_char(char **strings,char value);
int main(void){
char *strs;
char *s1="A string";
char *s2="Another";
char *s3="Third";
char *s4="Last";
char *s5="";
strs=s1;
strs=s2;
strs=s3;
strs=s4;
strs=s5;
//int x1=find_char(strs,'K');
//printf("x1:%d",x1);
if(find_char(strs,'t')){
printf("找到了\n");
}else{
printf("找不到\n");
}
system("pause");
return 0;
}
int find_char(char **strings,char value){
char *string;
while((string=*strings++)!=NULL){
while(*string++!='\0'){
if(*string==value){
return 1;
}
//string++;
}
}
return 0;
}
完全执行正常!!!{:sweat:}
求教到底是哪里导致了问题。
帖子编辑不了。
再贴一下。上面的能用的程序的循环有问题。修正后的是
#include <stdio.h>
#include <stdlib.h>
//自定义的计算字符串的长度
int my_strlen(char *string){
int length=0;
while(*string!='\0'){
length++;
string++;
}
return length;
}
int find_char(char **strings,char value);
int main(void){
char *name="Bill Gates";
int length=strlen(name);
char *strs;
char *s1="A string";
char *s2="Another";
char *s3="Third";
char *s4="Last";
char *s5="";
strs=s1;
strs=s2;
strs=s3;
strs=s4;
strs=s5;
printf("name points to string length :%d\n",length);//10
printf("name points to string length :%s,%d\n",name,my_strlen(name));
//int x1=find_char(strs,'K');
//printf("x1:%d",x1);
if(find_char(strs,'K')){
printf("找到了\n");
}else{
printf("找不到\n");
}
system("pause");
return 0;
}
int find_char(char **strings,char value){
char *string;
while((string=*strings)!=NULL){
while(*string!='\0'){
if(*string==value){
return 1;
}
string++;
}
}
return 0;
} 这个不是标准C语言程序吗 soma 发表于 2024-10-11 16:14
这个不是标准C语言程序吗
就是标准的c啊。不是c51 strlen函数要引用string.h头文件,而且它的返回值是unsigned int yzhkpli 发表于 2024-10-11 16:01
帖子编辑不了。
再贴一下。上面的能用的程序的循环有问题。修正后的是
zhp 发表于 2024-10-12 09:13
先谢谢了。底子太薄。好多东西,前几天写了又陌生了。{:sweat:} while((string=*strings++)!=NULL){
前面的一个=貌似应该是俩=,即==,
程序没写注释,现在我也忘记思路了。{:4_199:}{:4_199:}{:4_199:}{:4_198:}{:4_184:}
再次感谢热心坛友指正。
页:
[1]