关于指针输出字符串

chlth007 2014-08-12 10:57:53
#include <stdio.h>
main()
{
char *string;
scanf("%s",string);
printf("\n%s\n",*string);
}

运行后如图所示
...全文
469 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
Mortred_cp 2014-08-19
  • 打赏
  • 举报
回复
还能再基础点吗
707wk 2014-08-19
  • 打赏
  • 举报
回复
指针只能存字符串的地址,而不能存字符串
lx624909677 2014-08-19
  • 打赏
  • 举报
回复
你那样写只是声明了个指针变量,没有实际的数据存储空间,new一下或者malloc一下才行
chenzhuoxue 2014-08-19
  • 打赏
  • 举报
回复
楼上们的都是正解!
chlth007 2014-08-19
  • 打赏
  • 举报
回复
引用 3 楼 Intel0011 的回复:
char *string; -->只分配了指针变量string的内存
#include <stdio.h>
int main(void)
{
    char *string;
    string = malloc(sizoef(char) * 80); //使string指向分配的内存
    scanf("%s",string);
    printf("\n%s\n",*string);
    free(strng); //释放之前分配的内存

   return 0;
}
[/quote [quote=引用 2 楼 u012421456 的回复:] 字符串可以表达为char*的形式 但是char*不一定是字符串 char*本意是指向字符的指针,可能指向的是字符 的数组(就像int*一样) 只有它所指的字符数组有结尾的\0,才能说它 所指的是字符串
没有用。
赵4老师 2014-08-19
  • 打赏
  • 举报
回复
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。 其实电脑开机后物理内存的每个字节都是可读写的,区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。操作系统管理内存的粒度不是字节而是页,一页通常为4KB。
竹影半墙 2014-08-18
  • 打赏
  • 举报
回复
使用指针前要初始化。初始化来源可以是栈地址、堆地址或者全局变量的那个地址。
  • 打赏
  • 举报
回复
补充一点,如果输入的里面有各种字符建议用gets,不用scanf("%s", &str);
  • 打赏
  • 举报
回复
引用 楼主 chlth007 的回复:
#include <stdio.h>
main()
{
	char *string;
	scanf("%s",string);
	printf("\n%s\n",*string);
}
运行后如图所示
指针没有分配内存空间。 在scanf前加上: string = (char*)malloc(1024);
zcdabing 2014-08-12
  • 打赏
  • 举报
回复
	char *str =  (char*)malloc( 256*sizeof(char) );
	memset(str,0,256*sizeof(char));
	scanf("%s",str);

	printf("%s",str);
	free(str);
Intel0011 2014-08-12
  • 打赏
  • 举报
回复
char *string; -->只分配了指针变量string的内存
#include <stdio.h>
int main(void)
{
    char *string;
    string = malloc(sizoef(char) * 80); //使string指向分配的内存
    scanf("%s",string);
    printf("\n%s\n",*string);
    free(strng); //释放之前分配的内存

   return 0;
}
百曉生 2014-08-12
  • 打赏
  • 举报
回复
字符串可以表达为char*的形式 但是char*不一定是字符串 char*本意是指向字符的指针,可能指向的是字符 的数组(就像int*一样) 只有它所指的字符数组有结尾的\0,才能说它 所指的是字符串
chlth007 2014-08-12
  • 打赏
  • 举报
回复
把第六行的*去掉还是一样
baiyang_sky 2014-08-12
  • 打赏
  • 举报
回复
程序中只定义了一个char *的指针变量string, 是没有空间来存储所输入的字符串的, 可以修改成这样:

int main(int argc, char *argv[])
{
    char *string = NULL;
    char str[128]={0};     /*定义一个数组,并进行初始化*/

    string = str;
    scanf("%s", string);
    printf("the string is: %s !\n", string);
    return 0;
}

69,371

社区成员

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

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