【发布时间】:2017-09-08 15:29:35
【问题描述】:
#include <stdio.h>
#include <string.h>
int scomp(char* x, char* y);
int main(void)
{
printf("gimme a string: ");
char* str1;
scanf("%s",str1);
printf("gimme another string: ");
char* str2;
scanf("%s",str2);
printf("comparing them......\n__________\n");
if(scomp(str1,str2) == 0)
{
printf("yup, they are the same\n");
}else if(scomp(str1,str2)== 1){
printf("They are different buddy..\n");
}
return 0;
}
int scomp(char* x, char* y)
{
int n=0;
while(x[n] != '\0')
{
if(x[n] == y[n])
{
n++;
}else{
return 1;
}
}
return 0;
}
它给了我分段错误 11,我在最后一部分中编写的应该比较字符串的函数一定有问题。 有什么问题?
【问题讨论】:
-
你的 scanfs 的返回值是什么,根据规范是什么意思?
-
您正在将数据读入未分配的内存(
str1和str2),这不是一个好主意。但是您的代码也存在逻辑问题,但这不会导致段错误。 -
str1 和 str2 指向什么?
-
除了未分配的指针之外,比较字符串的函数应该被重写:
while(x[n] != '\0')->while(x[n] && y[n]) -
@GiannandreaVicidomini 这不起作用,它只是看起来像它起作用。因为指针指向内存的随机部分(在您的情况下未初始化),所以使用
char *会导致错误。但是如果你声明它char string;,它在堆栈上有一个位置和地址,并且表现得好像它可以工作,但是你可能会面临更进一步的未定义问题。
标签: c