| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 278 人关注过本帖
标题:发现一个很奇怪的问题...
取消只看楼主 加入收藏
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
结帖率:97.22%
收藏
已结贴  问题点数:31 回复次数:2 
发现一个很奇怪的问题...
程序代码:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <conio.h>
#include <stdlib.h>

typedef struct information
{
    char name[18];
    char phone[50];
}person;

int Input(person people[])
{
    int count = 0;
    char answer = 'n';

    for(;;)
    {
        printf("姓名:");
        gets(people[count].name);
        printf("电话:");
        gets(people[count++].phone);
        printf("还需要输入?(y/n):");
        scanf(" %c",&answer);

        while(getchar() != '\n');
        if(tolower(answer) == 'n')
            break;
    }
    return count;
}

char *zhuanhuan(char *);

int main(void)
{
    person people[18];
    int count = 0;
    char answer[18] ;
    int i = 0;
    char *temp = NULL;
    char *temp2 = NULL;

    count = Input(people);

    for(;;)
    {
      printf("\n\n\n需要查看信息?(打入名字或者All查看全部):");
      gets(answer);

      if(answer[0] == 'n')
          break;

      if(strcmp(temp = zhuanhuan(answer), "all") == 0)
      {
          free(temp);
          printf("\nAll the information:");
          for(i=0;i<count;i++)
              printf("\nname:%s\nphone:%s\n\n",people[i].name,people[i].phone);
           break;
      }
      else
        {
            printf("\nt = %s\n",temp);
            free(temp);/* 释放没有释放的temp */
            temp = NULL;
            printf("运行");
        for(i=0;i<count;i++)
        {
          if(strcmp(temp = zhuanhuan(answer), temp2 = zhuanhuan(people[i].name)) == 0)
          {
              printf("\nPersonal information:\nname:%s\nphone:%s\n",people[i].name,people[i].phone);
              free(temp);
              free(temp2);
              break;
          }
          free(temp);
          free(temp2);
        }
       }
    }
    return 0;
}

char *zhuanhuan(char *temp)
{
    char *ptemp = (char*)malloc(sizeof temp);
    int i = 0;

    strcpy(ptemp,temp);
   
    for(i=0;i<(int)strlen(ptemp);i++)
    ptemp[i] = tolower(ptemp[i]);

    printf("p = %s\nt = %s\n",ptemp,temp);
    return ptemp;
}

在这里一旦输出的名字多于4个字符如"jdaa"(包括终止符)我的电脑就会出警告
图片附件: 游客没有浏览图片的权限,请 登录注册

但全部忽略一样可以正常运行,而且是释放temp的空间是出的警告,可在那之前专门检测过temp,里面有数据啊...只希望各位仁兄们把源代码复制一下,运行下看是不是和我一样的结果
搜索更多相关主题的帖子: color 
2012-12-16 18:37
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
sizeof(temp)计算的是一个指针的字节,为4,我懂了谢谢
strlen(temp)+1,只能用这个表达式申请它的空间了吗?还有没有其他办法?

I have not failed completely
2012-12-16 19:25
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
temp是个指针变量,strlen(temp)是根据字符的多少作为返回值的,加上终止符1,对的...

I have not failed completely
2012-12-16 19:28
快速回复:发现一个很奇怪的问题...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024877 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved