求大神,用指针的话怎么改

#include"stdio.h"voidmain(){char*p;inti,j=0;gets(p);for(i=0;*(p+i)!='\0';i++)j++;prin... #include"stdio.h"
void main()
{
char *p;
int i,j=0;
gets(p);
for(i=0;*(p+i)!='\0';i++)
j++;
printf("%d\n",j);
}
展开
 我来答
泷皖莲6
2014-12-04 · TA获得超过622个赞
知道小有建树答主
回答量:304
采纳率:0%
帮助的人:314万
展开全部
#include"stdio.h"
void main()
{
char p[4096];
char *ptr = &p[0];
int j=0;
gets(p);
while(*ptr!='\0')
{
    j++;
    ptr++;
}
printf("%d\n",j);
}

 楼主你的char *p没有初始化,应该运行不了的。

追问
还是错的,题目是统计一个字符串中的字母,数字,空格,和其他字符的字数
追答
#include"stdio.h"
void main()
{
        char chp[4096];
char *p = &chp[0];
int i,j=0;
gets(chp);
for(i=0;*(p+i)!='\0';i++)
j++;
printf("%d\n",j);
}

这是你原来的写法,这样也行

bignode
2014-12-04 · TA获得超过2664个赞
知道大有可为答主
回答量:1427
采纳率:75%
帮助的人:548万
展开全部
char *p;

改成 char p[100];

100是缓冲区大小,根据输入内容多少自己定。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
爷已戒烟很多年
推荐于2016-05-01 · TA获得超过667个赞
知道小有建树答主
回答量:168
采纳率:100%
帮助的人:131万
展开全部
指针必须指向一个有效的地址空间,你只给了一个指针,但是没有给他指向有效空间——

#include"stdio.h"
void main()
{
char *p;
char arr[100]; //注意你输入的时候不能超过100个字符
p=arr;
int i,j=0;
gets(p);
for(i=0;*(p+i)!='\0';i++)
j++;
printf("%d\n",j);
}
追问
字符串不是可以用指针代替吗?不能直接用?题目是统计一个字符串中的字母,数字,空格,和其他字符的字数,你给我的我编过,我是不懂为什么我不能那么用指针;
追答

字符串不可以用指针去替代,所有的指针都只是存储一个地址,真正存储字符串的是一个有效的物理地址,指针只有四个字节,不存储字符串,指针只是一个指示标志,告诉你 你要找的东西在内存的那个地址里边——

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
虎爷可乐
2014-12-04 · TA获得超过253个赞
知道小有建树答主
回答量:238
采纳率:66%
帮助的人:143万
展开全部
#include"stdio.h"
#include"stdlib.h"

void main(){
char *p;
int i, j = 0;

p = (char*)malloc(128);

gets(p);
for(i = 0; *(p + i) != '\0'; i++)
j++;

free(p);

printf("%d\n", j);
}

要用 malloc 和 free 手动申请和释放内存
追问
”要用 malloc 和 free 手动申请和释放内存 “ 是什么意思 ,我还没学你能帮解释一下吗?p = (char*)malloc(128);和 free(p);
我没看懂
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
to_changer
2014-12-04 · 超过14用户采纳过TA的回答
知道答主
回答量:45
采纳率:0%
帮助的人:29.7万
展开全部
指针在使用之前一定要初始化,如果在没有初始化前,它的值是未知,有可能指向系统当中某些敏感已存在数据的内存块,你在往里面存入新数据的时候,会覆盖掉原来的,数据,所以你得先找出一块可用的内存,并把首地址数值赋值给这个指针变量,具体多少大小,得看你要存多少数据了。
你也可以分配你认识适合大小的内存。

要用 malloc 和 free 手动申请和释放内存 “ ;和 free(p);
(char*)malloc(128) 在内存当中找到128字节大小的内存,char * 主要是声明可以指向的指针类型,在取数的时候,首先找到分配好的内存的首地址,然后根据指向的类型,例如 char * 就是每次取出从现在开始往后数一个字节的数据(8位),这是一个单位,直到取出所有的数据。
free 就是把刚你指向的那个内存,数据清空(还原为初始值),并告诉系统,这个块内存可以被重新申请了。
追问
谢谢
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式