c语言初学 求大神解释能用scanf给字符变量赋值吗

vi1988 2017-12-11 07:52:20
//编一个函数,统计并返回形参所指向的字符串长度。
//在主函数中输入字符串,调用该函数统计字符串长度并输出。
#include <stdio.h>
#include <stdlib.h>
extern int charlength(char *ps)
{
int length=0;
while(*(ps+length)!='\0')
{
length++;
}
return(length);
}

void main()
{
char *pc;
printf("请输入一个字符串:");
scanf("%s",pc); //编译时提示这里出错。错在哪里?难道不能用scanf()函数输入字符串后赋给字符型指针变量?

printf("\n\n您刚才输入的字符串%s长度为:%d。\n\n",pc,charlength(pc));

system("pause");
}

由于要存放数据,C语言必须在数据定义语句中先初始化,预先确定存储空间的大小才可以,比如char *pc="abcd"是可以的。

那为什么下面的语句又可以呢?
void main()
{
char *pc;
pc="abcd";
}
...全文
1169 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
a843676885 2017-12-13
  • 打赏
  • 举报
回复
凡是设计到指针的都记得要先初始化、分配空间,这是个习惯
dh19930415 2017-12-12
  • 打赏
  • 举报
回复
一个是地址,一个是地址内的数据
xian_wwq 2017-12-12
  • 打赏
  • 举报
回复
2楼讲述的非常清晰 指针没有指向有效的空间,肯定是不行的
自信男孩 2017-12-12
  • 打赏
  • 举报
回复
char *pc;是野指针,指向的内存区域是随机的,其实没有给pc分配一个可以读写的空间。因此不能直接使用(scanf)。 不用scanf而是用pc = "abcd";这样可以计算字符串长度。这是因为"abcd"是只读的,在只读数据段存放,pc = "abcd";是将字符串的首地址赋值给pc;这样计算出来的长度就是"abcd"的长度; 指针和数据有一定的区别;指针的空间是用于存放某个地址值的,而不是用于存放实际数据的(比如字符串);可以考虑将指针指向一款内存区域,比如使用malloc申请堆上的空间,这样就可以使用scanf,输入的数据就会放到malloc的内存空间里,这个地址是pc指向的,存放在pc指针变量里的地址;
#include <stdio.h>
#include <stdlib.h>

int charlength(char *ps)
{
         int length=0;
         while(*(ps+length)!='\0')
         {
          length++;
         }
         return(length);
}

void main()
{
         char *pc = (char *)malloc(sizeof(char) * 80);
         if (!pc)
             return -1;
         printf("请输入一个字符串:");
         scanf("%s",pc);

         printf("\n\n您刚才输入的字符串%s长度为:%d。\n\n",pc,charlength(pc));

         free(pc);
        system("pause");
}
参考一下吧~
Intel0011 2017-12-12
  • 打赏
  • 举报
回复
char *pc; -----------> 这里只分配了指针,但指针未初始化,也就是指针没有指向有效位置,改为字符数组即可 char pc[120]; printf("请输入一个字符串:"); scanf("%s",pc); //编译时提示这里出错。错在哪里?难道不能用scanf()函数输入字符串后赋给字符型指针变量?

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧