字符串必須申請內存空間

#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; }

代碼出現指針問題spa

緣由:指針

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

改正:

#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; }

或者:blog

#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; }
相關文章
相關標籤/搜索