C语言scanf与scanf_s

来源:百度知道 编辑:UC知道 时间:2024/06/20 17:13:36
我打编译器是microsoft visual studio 2005,我的源程序如下,注意注释的地方,就是scan函数中的scanf_s函数,程序运行正常,但是当输入字符串大于或等于8个字符时,链表的输出就不正常了,7个以下是正常的,其他的不改变,单单把scanf_s改为scanf可以解决这个问题,但是系统又会给一个警告。。。。要怎么解决啊。。要正常又没警告的。
scanf_s#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAXSIZE 1000
typedef struct LNode
{ char data;
struct LNode *next;
}LinkList;

typedef struct
{
char elem[MAXSIZE];
int top;
}SqStack;

int main()
{ LinkList *CreateList(LinkList *L,char a[],int n);
void scan(char a[]);
void display(LinkList *L);
char a[MAXSIZE];
LinkList *L;
L=(LinkList *)malloc(sizeof(LinkList));
L->next=NULL;
scan(a);
L=CreateList(L,a,strlen(a));
display(L);
return 1;
}
LinkList *CreateList(LinkList *L,char a[],int n)
{
LinkList *s,*r;
int i;
r=L;
for(i=0;i<n;i++)
{
s=(LinkList *)malloc(s

void scan改成这个
void scan(char **a)
{
scanf("%s",*a);
}
调用时用scan(&a);应该就可以了吧,这里的指针是局部值,用指针的指针来传递指针的值试试

因为vs系列的是c++编译器,cin比scanf之类的更安全,如果你纯c编程用scanf在这个环境下,自然要有警告,办法是用cin,或者换c的编译器。

我把scanf_s改为scanf后,在VC6.0和TURBO 2.0上运行都没有问题啊.
输入string
输出
s1
t1
r1
i1
n1
g1
你为什么要用scanf_s呢,我刚才在网上查了一下,这是一个什么函数啊.我以前也没有见过,也没听说过啊!

sas