字符串指针与字符串数组的有关问题

字符串指针与字符串数组的问题
在VS 2010上运行以下C代码:

void main(){
char st[20],*ps;
int i;
printf("input a string:");
ps=st;
scanf_s("%s",ps);

for(i=0;ps[i]!='\0';i++)
if(ps[i]=='k'){
printf("there is a 'k' in the string\n");
break;
}
if(ps[i]=='\0')
printf("There is no 'k' in the string\n");
system ("pause");
//return 0;
}


程序是判断输入的字符串中有无'k'字符
发现得不到正确结果,无论输入的字符串带不带'k'都是输出"There is no 'k' in the string\n"

如下运行截图:
字符串指针与字符串数组的有关问题

单步调试的情况:
字符串指针与字符串数组的有关问题

也就是程序运行到这行
ps=st;
代码的时候出现了错误,但是本身程序不报错,只是得不到正确结果

这句将字符串数组首地址赋值给字符串指针的表达式无法计算是什么意思?菜鸟表示深深的不理解字符串指针与字符串数组的有关问题

还请高手指教
------解决思路----------------------
把“scanf_s("%s",ps);”改成“scanf_s("%s",ps,20);”或者“scanf("%s",ps);”
------解决思路----------------------
scans_s 要么指定长度,要么传入数组名,直接传指针不行的
scanf_s("%s", st)
------解决思路----------------------
	
char st[20],*ps;  //定义了一个数组, 以及一个指针
int i;
printf("input a string:");
ps=st; //数组名也等于一个指针, 赋值之后ps可以操作st这个数组的内容
scanf("%s",ps);  //这里不要用scanf_s(); 不具备通用性, scanf()才是标准C的函数

for(i=0;ps[i]!='\0';i++)  //for循环要加大括号, 否则第二个if不在for循环的作用域中
{
if(ps[i] == 'k'){
printf("there is a 'k' in the string\n");
break;
}
if(ps[i]=='\0')
printf("There is no 'k' in the string\n");
}
字符串指针与字符串数组的有关问题
------解决思路----------------------
#include <stdio.h>
#include <cstdlib>
void main(){
char st[20],*ps;
int i;
printf("input a string:");
scanf("%s",st);//改用scanf,直接给数据赋值
ps=st;//指针指向数组首地址
for(i=0;ps[i]!='\0';i++)
if(ps[i]=='k'){
printf("there is a 'k' in the string\n");
break;
}
if(ps[i]=='\0')
printf("There is no 'k' in the string\n");
system ("pause");
}


------解决思路----------------------
我试了,一楼的解答是正确的~~~

#include <stdio.h>
#include <cstdlib>
void main(){
char st[20],*ps;
int i;
printf("input a string:");
ps=st;
//scanf("%s",ps);
scanf_s("%s",ps,20);
for(i=0;ps[i]!='\0';i++)
if(ps[i]=='k'){
printf("there is a 'k' in the string\n");
break;
}
if(ps[i]=='\0')
printf("There is no 'k' in the string\n");
system ("pause");
//return 0;
}

百度一下scanf_s,得知:很多带“_s”后缀的函数是为了让原版函数更安全,传入一个和参数有关的大小值,避免引用到不存在的元素,有时hacker可以利用原版的不安全性黑掉系统。比如:char d[20];写成scanf_s("%s",d,20);才是正确的,有这个参数20使准确性提高。
学习了~~~