首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 不明白怎么用%[] [已结贴,结贴人:lvyexiaozi]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lvyexiaozi
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 揭帖率:
    发表于:2008-03-28 21:58:33 楼主

    环境是VC++ 6.0
    源程序是

    #include <stdio.h>
    main()
    {
    string *str;
    scanf("%[\n]",str);
    printf("\n%s",str);

    }
    出错说0xcccccccc内存不能为read
    不明白。各位指点下。
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dizuo
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 2

    发表于:2008-03-28 22:05:101楼 得分:10
    C/C++ code
    [Reading Undelimited strings] *To read strings not delimited by whitespace characters, a set of characters in brackets ([ ]) can be substituted for the s (string) type character. The set of characters in brackets is referred to as a control string. The corresponding input field is read up to the first character that does not appear in the control string. If the first character in the set is a caret (^), the effect is reversed: The input field is read up to the first character that does appear in the rest of the character set. *Note that %[a-z] and %[z-a] are interpreted as equivalent to %[abcde...z]. This is a common scanf function extension, but note that the ANSI standard does not require it. 举一些例子: 对于 const char* p = "12232114687ABC12356"; sscanf(p,"%[123]",buf); // 就把是'1'或'2'或'3'的字读读到buf中,直到遇到一个不是'1'且不是'2'且不是'3'的字符,于是执行后buf应该是"1223211"; %[123]等同于%[231],等同于%[321]……,列表中的顺序是无所谓的; %[123]也等同于%[1-3]或%[3-1],也就是“1至3”,对于连续的字符列表这样写就很简单,比如%[a-z]等同%[abc…省略…z]; 想想看,%[3-14]应该等同于什么?是“3至14”吗?当然不是,因为[]中的是字符,而不是数字,所以%[3-14]应该等同于%[3214],等同于%[1234]; 同理,想只取字母,那就可以写成%[A-Za-z]; 如果列表的第一个字母是^,那么正好相反,比如%[^A-Za-z]的意思就是取字母之外的所有字符。 对于字符串"abDEc123"如果想按照字母和数字读到两个字符串中就应该是 "%[a-zA-Z]%[0-9]",buf1,buf2 ; 假如我想取一行字符,该怎么办?"%s"是不行的,因为%s遇到空白字符(空格、制表符、\r、\n)就结束了,所以可以写成 "%[^\n]%*c"%[^\n]的作用刚才讲过了,就是读\n之外的所有字符,也就是说读到\n为止,%*c的作用就是把\n去掉,否则再次读的时候一直遇到的都是\n; 所有对%s起作用的控制,都可以用于%[],比如"%*[^\n]%*c"就表示跳过一行,"%-20[^\n]"就表示读取\n前20个字符。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • rushman
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-03-29 11:18:002楼 得分:5
    C/C++ code
    #include <stdio.h> #define MAX_LINESIZE 1024 main() { //string *str; //未初始化的指针,导致内存访问异常 char str[MAX_LINESIZE]; scanf("%[\n]",str); printf("\n%s",str); }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • qiuqiu173
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-03-29 11:35:573楼 得分:1
    引用 1 楼 dizuo 的回复:
    C/C++ code[Reading Undelimited strings]
    *To read strings not delimited by whitespace characters, a set of characters in brackets ([ ]) can be substituted for the s (string) type character. The set of characters in brackets is referred to as a control string. The corresponding input field is read up to the first character that does not appear in the control string. If the first character in the …



    学习
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • eyf0917
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-03-29 12:31:554楼 得分:1
    C/C++ code
    这样改下就OK了 #include <stdio.h> #include "stdlib.h" main() { char *str; str=(char *)malloc(sizeof(char)); /*指针初始化*/ scanf("%[^\n]",str); /*表示遇到回车符就结束*/ printf("\n%s",str); }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • rushman
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-03-29 12:36:075楼 得分:1
    楼上的,这里分配的是什么?
    C/C++ code
    str=(char *)malloc(sizeof(char)); /*指针初始化*/
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • abupie
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-03-29 12:49:076楼 得分:1
    #include  <stdio.h>
    main()
    {
    string *str; //为什么要用string? 后面的函数都是char的,直接用char str[1024]吧。
    scanf("%[\n]",str);
    printf("\n%s",str);

    }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • studyall123
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-03-29 13:01:107楼 得分:1
    ls
    string *str //指向字符串的指针
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • guocai_yao
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-03-29 14:04:578楼 得分:0
    引用 1 楼 dizuo 的回复:
    C/C++ code[Reading Undelimited strings]
    *To read strings not delimited by whitespace characters, a set of characters in brackets ([ ]) can be substituted for the s (string) type character. The set of characters in brackets is referred to as a control string. The corresponding input field is read up to the first character that does not appear in the control string. If the first character in the …

    厉害!!!!!!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lvyexiaozi
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-03-30 16:18:159楼 得分:0
    谢各位。
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved