将一个字符串逆序输出 & 为指针分配内存
2013-07-19 16:01
375 查看
#include <stdio.h>
#include <malloc.h>
void reverse(char *str);
int main()
{
char *s;
s=(char *)malloc(sizeof(char));//一定要记得分配内存哦,不然会出现运行段错误的哦
printf("请输入一串字符:");
scanf("%s",s); //输入的字符串在堆中
reverse(s);
printf("逆序后:%s\n",s);
free(s);
s=NULL;
return 0;
}
void reverse(char *str)
{
int i=0,len=0;
char c;
while(str[i++]!='\0')
{
len++;
}
printf("len=%d\n",len);
for(i=0;i<len/2;i++)
{
printf("str[%d]=%c,str[%d]=%c\n",i,str[i],len-i-1,str[len-i-1]);
c=str[i];
str[i]=str[len-i-1];
str[len-i-1]=c;
}
// return s;
}
关于: char *a = (char *)malloc(sizeof(char))
要理解一个概念,指针只是用于保存地址,当你输入一串字符串的时候,你这个字符串的地址就赋给指针a变量了,而%s打印的时候只会从这个地址开始傻傻的打印,直到遇到结束符才停止,如果运气好,你输入的那片内存地址没有被垃圾值填满,那会打印出你输入的字符串
若不用malloc
因为你的char *a在内存中根本就是一个指向未知的空间,也就是说不合法的指针,你把一个未知的地址变量当左值,操作系统肯定会抱怨的
指针本质上也是一个变量,如果这个变量都没有合法的空间来存储地址,不崩溃才怪
#include <malloc.h>
void reverse(char *str);
int main()
{
char *s;
s=(char *)malloc(sizeof(char));//一定要记得分配内存哦,不然会出现运行段错误的哦
printf("请输入一串字符:");
scanf("%s",s); //输入的字符串在堆中
reverse(s);
printf("逆序后:%s\n",s);
free(s);
s=NULL;
return 0;
}
void reverse(char *str)
{
int i=0,len=0;
char c;
while(str[i++]!='\0')
{
len++;
}
printf("len=%d\n",len);
for(i=0;i<len/2;i++)
{
printf("str[%d]=%c,str[%d]=%c\n",i,str[i],len-i-1,str[len-i-1]);
c=str[i];
str[i]=str[len-i-1];
str[len-i-1]=c;
}
// return s;
}
关于: char *a = (char *)malloc(sizeof(char))
要理解一个概念,指针只是用于保存地址,当你输入一串字符串的时候,你这个字符串的地址就赋给指针a变量了,而%s打印的时候只会从这个地址开始傻傻的打印,直到遇到结束符才停止,如果运气好,你输入的那片内存地址没有被垃圾值填满,那会打印出你输入的字符串
若不用malloc
因为你的char *a在内存中根本就是一个指向未知的空间,也就是说不合法的指针,你把一个未知的地址变量当左值,操作系统肯定会抱怨的
指针本质上也是一个变量,如果这个变量都没有合法的空间来存储地址,不崩溃才怪
相关文章推荐
- 编写一个函数new,对n个字符开辟连续的存储空间,此函数应返回一个指针(地址),指向字符串开始的空间。new(n)表示分配n个字节的内存空间。
- <复习>指针结构体内存分配
- 习题 8.19(1) 编写一个函数new,对n个字符开辟连续的存储空间,此函数应返回一个指针(地址),指向字符串开始的空间。new(n)表示分配n个字节的内存空间。
- 输入一个字符串,要求输出字符串中字符所有的排列,例如输入"abc",得到"abc","acb","bca","bac","cab","cba"
- 函数名称本身就是一个指针,把&加在名称前得到的值是一样的
- 内存的堆分配和栈分配 & 字符数组,字符指针
- 将一个字符串中每个单词逆序输出(2014年西安华为实习生机试第二题)
- 《任意输入一个合理大小的字符串,实现逆序输出并统计一个字符串中字母、数字、空格及其他字符的个数》
- 取出一个字符串中字母出现的次数。如:字符串:"abcdekka27qoq" ,输出格式为: a(2)b(1)k(2)
- 输入一个整数,将这个整数以字符串的形式逆序输出
- // 写一个函数,实现将一个字符串中的'/t'替换成四个'*', '/t'个数不定。如char *p="ht/thdsf/t/ttt/tfds dfsw/t ew/t",替换后p="ht****hdsf********tt****fds dfsw****
- 输入一个字符串,将其逆序后输出
- 给一个很长的字符串str 还有一个字符集比如"abc" 找出str 里包含"abc"的最短子串。要求O(n)
- 通过字符串逆序学习二级指针的三种内存模型 #################################################### #########################
- C++编程入门系列之三十二(数组、指针和字符串:动态内存分配和释放)
- 输入一个整数,将这个整数以字符串的形式逆序输出 程序不考虑负数的情况,若数字含有0,则逆序形式也含有0,如输入为100,则输出为001
- 内存的堆分配和栈分配 & 字符数组,字符指针,Sizeof总结
- C++输入一个字符串,把其中的字符按照逆序输出的两种方法
- C语言学习7-1:使用6级指针访问一个整数,使用隐式内存分配中转,约瑟夫环
- 建立一个数组,内存放5个学生的数据(学号、成绩),用指针指向数组首元素,输出1、3、5学生的数据