C++问题strncpy后strcmp
#include<stdio.h>#include<string.h>intmain(){charx[1],y[1],*s="TFFFTFTFTTFTFTF";inti,...
#include<stdio.h>
#include<string.h>
int
main()
{
char x[1],y[1],*s="TFFFTFTFTTFTFTF";
int i,u=0;
for (i=0;i<15;i++)
{
strncpy(x,s+i,1);
x[1]='\0';
strncpy(y,s+i,1);
y[1]='\0';
u=strcmp(x,y);
printf("%d\n",u);
}
return(0);
}
//为什么输出结果总是-1,应该全是0才对啊 展开
#include<string.h>
int
main()
{
char x[1],y[1],*s="TFFFTFTFTTFTFTF";
int i,u=0;
for (i=0;i<15;i++)
{
strncpy(x,s+i,1);
x[1]='\0';
strncpy(y,s+i,1);
y[1]='\0';
u=strcmp(x,y);
printf("%d\n",u);
}
return(0);
}
//为什么输出结果总是-1,应该全是0才对啊 展开
3个回答
展开全部
你的char x[1],y[1],*s="TFFFTFTFTTFTFTF";
错了.
应该是char x[2],y[2],*s="TFFFTFTFTTFTFTF";
如果你想让x,y作为字符串处理,那么你就要考虑多给它们留一个字符空间啊.
你定义的x[1],y[1]在从字符串s中取数时,x[0],y[0]里有数据.
当你使用x[1]='\0';的时候,其实这个x[1]和y[0]是指向同一块内存.
所以后来y[0]把x[1]的'\0'覆盖了.而y[0]与y[1]则构成了你想要的字符串.
但x的字符串成了x[0]y[0]y[1]了.所以结果就不等了啊.
错了.
应该是char x[2],y[2],*s="TFFFTFTFTTFTFTF";
如果你想让x,y作为字符串处理,那么你就要考虑多给它们留一个字符空间啊.
你定义的x[1],y[1]在从字符串s中取数时,x[0],y[0]里有数据.
当你使用x[1]='\0';的时候,其实这个x[1]和y[0]是指向同一块内存.
所以后来y[0]把x[1]的'\0'覆盖了.而y[0]与y[1]则构成了你想要的字符串.
但x的字符串成了x[0]y[0]y[1]了.所以结果就不等了啊.
展开全部
定义的是char x[1],也就是只有一个内存空间,何来x[1]?而且上述函数是对以“\0"结尾的字符串才能使用,比如
char*s1="Hello";或者char s1[]="Hello";
char*s2="World"或者char s2[]="World";
这两种写法自动加“\0",
或者char s1[10]={0},然后赋值,这种情况下注意内存问题,下标从0开始,结尾预留一个“\0"的空间
这时候strcmp(s1,s2)才会返回正确的结果
char*s1="Hello";或者char s1[]="Hello";
char*s2="World"或者char s2[]="World";
这两种写法自动加“\0",
或者char s1[10]={0},然后赋值,这种情况下注意内存问题,下标从0开始,结尾预留一个“\0"的空间
这时候strcmp(s1,s2)才会返回正确的结果
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
char x[1],y[1],*s="TFFFTFTFTTFTFTF";//数组超界,改为下面
char x[2],y[2],*s="TFFFTFTFTTFTFTF";
char x[2],y[2],*s="TFFFTFTFTTFTFTF";
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询