字符串必須申請內存空間


#include "stdafx.h"
#include "stdlib.h"

int _tmain(int argc, _TCHAR* argv[])
{
    //輸入字符串 
    char *str; 
    scanf("%s",str); 
    printf("輸出輸入的字符串*str=%s\n",&str); 
    system("pause");
    return 0;
}

代碼出現指針問題

原因:

這樣使用容易造成內存錯誤。
char *str; 聲明了一個指針,但沒有對其進行初始化,他的值是一個無法預知的值。可能指向一段空的內存,也可能指向其他程序使用的內存地址,也可能不是無用的內存地址。
scanf("%s",str); 的意思是獲取一段字符串,並把字符串放到str所指的內存地址之后的一段空間。但本程序並沒有申請內存空間,所指的那段內存空間就是上面三種情況中的一種。所以有可能就將其他程序的內存內容給改變了,其他程序崩潰了。
printf("輸出輸入的字符串*str=%s\n",&str);
這個輸出語句也存在問題,&str 應改為str,這的值是字符串地址的頭指針,而不是str這個變量所在的地址。&str str這個變量在內存中的地址。str 的值是字符串地址的頭指針

改正:

#include "stdafx.h"
#include "stdlib.h"

int _tmain(int argc, _TCHAR* argv[])
{
    //輸入字符串 
    char str[50];
    scanf("%s",str);
    printf("輸出輸入的字符串*str=%s\n",str);
    system("pause");
    return 0;
}

或者:

#include "stdafx.h"
#include "stdlib.h"

int _tmain(int argc, _TCHAR* argv[])
{
    //輸入字符串 
    char *str = (char*)malloc(100);
    scanf("%s",str);
    printf("輸出輸入的字符串*str=%s\n",str);
    system("pause");
    return 0;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM