c语言字符串的输入输出和比较
程序目的是检验2次输入的密码是否相同.#include<stdio.h>#include<string.h>#include<conio.h>voidmain(){cha...
程序目的是检验2次输入的密码是否相同.
#include <stdio.h>
#include <string.h>
#include <conio.h>
void main()
{
char str1[8],str2[20],str3[7],str4[7];
int i;
printf ("Please input your password.\n");
for (i=0;i<6;i++)
{
str1[i] = getch ();
printf ("*");
}
printf ("\n");
printf ("Please input your password again.\n");
for (i=0;i<6;i++)
{
str2[i] = getch ();
printf ("*");
}
printf ("\n");
puts (str1);
printf ("\n");
}
以上没有给出比较..但我这样检验时,输出的的str1是XXXXXX烫烫..
为什么会出现"烫"??
如果要比较str1和str2,是不是要调用sprintf将他们转换成字符串放在str3,str4中?
高手帮我解释一下...我现在学到字符数组就有点昏了..
我这样调用sprintf对不?
sprintf (str3[i],%s,str1[i]) 展开
#include <stdio.h>
#include <string.h>
#include <conio.h>
void main()
{
char str1[8],str2[20],str3[7],str4[7];
int i;
printf ("Please input your password.\n");
for (i=0;i<6;i++)
{
str1[i] = getch ();
printf ("*");
}
printf ("\n");
printf ("Please input your password again.\n");
for (i=0;i<6;i++)
{
str2[i] = getch ();
printf ("*");
}
printf ("\n");
puts (str1);
printf ("\n");
}
以上没有给出比较..但我这样检验时,输出的的str1是XXXXXX烫烫..
为什么会出现"烫"??
如果要比较str1和str2,是不是要调用sprintf将他们转换成字符串放在str3,str4中?
高手帮我解释一下...我现在学到字符数组就有点昏了..
我这样调用sprintf对不?
sprintf (str3[i],%s,str1[i]) 展开
3个回答
展开全部
你的字符串输入完成后没有加上字符串结束标志'\0',用puts输出的时候,正常输出结束后不会停止,会继续输出后面的内容.str1[6]以后的内容全为CC,而CC CC(这是两个字节的连续内存中的内容,用16进制表示)会输出来就是"烫".
正确的是
for (i=0;i<6;i++)
{
str1[i] = getch ();
printf ("*");
}
str1[i]='\0'; //加上结束标志.
printf ("\n");
后面str2的输入部分也同样修改.
比较的时候可以直接用strcmp(str1,str2)比较,不用再复制.
正确的是
for (i=0;i<6;i++)
{
str1[i] = getch ();
printf ("*");
}
str1[i]='\0'; //加上结束标志.
printf ("\n");
后面str2的输入部分也同样修改.
比较的时候可以直接用strcmp(str1,str2)比较,不用再复制.
展开全部
因为你的字符数组没有初始化。
在初始化时写成char str1[8] = {0};
或在使用前清0
ZeroMemory(str1, 8);
至于比较字符串,不需要另做保存的。
使用函数strcmp,如:
if (0 == strcmp(str1, str2))
{
// 相等
}
sprintf用法例:
sprintf(str1, "%s", "str2");
复制字符串的方法很多的:
1.
char buf[256] = {0};
strcat(buf, str1);
2.
strcpy(str2, str1);
3.
memcpy(str2, str1, strlen(str1));
类似的函数很多,我就写这么多了,都要注意内存是否够用。
在初始化时写成char str1[8] = {0};
或在使用前清0
ZeroMemory(str1, 8);
至于比较字符串,不需要另做保存的。
使用函数strcmp,如:
if (0 == strcmp(str1, str2))
{
// 相等
}
sprintf用法例:
sprintf(str1, "%s", "str2");
复制字符串的方法很多的:
1.
char buf[256] = {0};
strcat(buf, str1);
2.
strcpy(str2, str1);
3.
memcpy(str2, str1, strlen(str1));
类似的函数很多,我就写这么多了,都要注意内存是否够用。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
自己揣摸一下:
sprintf (str3,"%s",str1);
sprintf (str3[i],"%c",str1[i]);
sprintf (str3,"%s",str1);
sprintf (str3[i],"%c",str1[i]);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询