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

 

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-10-31
  • 2021-05-06
  • 2021-08-13
  • 2021-12-23
猜你喜欢
  • 2022-02-22
  • 2022-12-23
  • 2021-09-02
  • 2021-06-11
  • 2022-12-23
  • 2021-12-08
  • 2021-05-15
相关资源
相似解决方案