解决scanf_s函数报错:没有为格式字符串传递足够的参数
生活随笔
收集整理的這篇文章主要介紹了
解决scanf_s函数报错:没有为格式字符串传递足够的参数
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
報錯:scanf_s函數(shù)報錯:沒有為格式字符串傳遞足夠的參數(shù)
int main() {char s1[20] = "i m name";char *p1, *p2;char s3[10] = {0};p1 = s1;p2 = s3;printf("請輸入你的名字: \n");scanf_s("%s",&s3);printf("%s\n", s3);for (; *p1 != '\0'; p1++) {if (*p1 == *p2) {p2 = s3;}printf("I am %s\n", s3);}while (true){}return 0; }這個問題很變態(tài)
解決辦法:在使用%c和%s讀入字符或字符串時,應(yīng)在地址參數(shù)后附加一個緩沖區(qū)邊界值。?
int main() {char s1[20] = "i m name";char *p1, *p2;char s3[10] = {0};p1 = s1;p2 = s3;printf("請輸入你的名字: \n");//scanf_s("%s",&s3);scanf_s("%s",&s3,sizeof(s3)); //使用sizeofprintf("%s\n", s3);for (; *p1 != '\0'; p1++) {if (*p1 == *p2) {p2 = s3;}printf("I am %s\n", s3);}while (true){}return 0; }總結(jié);就會提示你沒有為格式字符串傳遞足夠的參數(shù)。
首先我們來看一下scanf和scanf_s的區(qū)別
scanf()不會檢查輸入邊界,可能造成數(shù)據(jù)溢出。
scanf_s()會進行邊界檢查。
scanf()函數(shù)是標準C中提供的標準輸入函數(shù),用以用戶輸入數(shù)據(jù)
scanf_s()函數(shù)是Microsoft公司VS開發(fā)工具提供的一個功能相同的安全標準輸入函數(shù),從vc++2005開始,VS系統(tǒng)提供了scanf_s()。在調(diào)用該函數(shù)時,必須提供一個數(shù)字以表明最多讀取多少位字符。
?
?
上面的程序有點復雜;下面來一個簡單點的例子:
int main(void) {char str1[30] = { 0 };char str2[30] = { 0 };char str3[30] = { 0 };//gets() 用法printf("Input a string: ");gets_s(str1);//scanf() 用法printf("Input a string: ");scanf_s("%s", str2);scanf_s("%s", str3);printf("\nstr1: %s\n", str1);printf("str2: %s\n", str2);printf("str3: %s\n", str3);while (true){}return 0; }上面的代碼當你輸入字符串的時候會報錯:沒有為格式字符串傳遞足夠的參數(shù)
解決辦法:在使用%c和%s讀入字符或字符串時,應(yīng)在地址參數(shù)后附加一個緩沖區(qū)邊界值。?
總結(jié)
以上是生活随笔為你收集整理的解决scanf_s函数报错:没有为格式字符串传递足够的参数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: stl-vector
- 下一篇: stl-stack