标题:求助内存错误!
只看楼主
木北北
Rank: 1
等 级:新手上路
帖 子:79
专家分:0
注 册:2007-11-24
 问题点数:0 回复次数:12 
求助内存错误!
#include <stdio.h>
#include <string.h>
struct person
{
char name[30];
int count;
}leader[3]={"lilin",0,"zhangwen",0,"dacong",0};
int main(void)
{
int i,j;
char namel[10];
for(i=1;i<=10;i++)
{
  scanf("%s",namel);   /*为什么不能加取地址符号那?写成scanf("%s",&namel[i]),就不行,如果加了编译时没错,可执行过程会出现内存的错误。高手帮帮我!谢谢!*/
  for(j=0;j<3;j++)
   if(strcmp(namel,leader[j].name)==0)
    leader[j].count++;
}
printf("\n");
for(i=0;i<3;i++)
{
  printf("%5s,%5d\n",leader[i].name,leader[i].count);
}
}
搜索更多相关主题的帖子: 内存 leader namel int 
2007-11-27 15:09
MikeFT
Rank: 1
来 自:青岛
等 级:新手上路
帖 子:644
专家分:0
注 册:2006-11-1
得分:0 
namel是数组名,本来就是个地址!!!
namel[i])只是其中的一个元素是char型的要用scanf("%c",&namel[i])才行.
我有两年没碰C了,如果有不对的地方请大家多多原谅!!!

Live And Learn !!!
2007-11-27 15:17
木北北
Rank: 1
等 级:新手上路
帖 子:79
专家分:0
注 册:2007-11-24
得分:0 
可我看老师或是书上有的也加上取地址符号了,也没出现错误啊?
我知道可以不加,因为数组名就是地址,可要是加上也不应该错啊....
2007-11-27 15:19
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
得分:0 
scanf("%s",namel);  /* 因为数组名就是地址 */

%s  不是字符,是读取一个字符串。

[[italic] 本帖最后由 cosdos 于 2007-11-27 15:26 编辑 [/italic]]

—>〉Sun〈<—
2007-11-27 15:21
MikeFT
Rank: 1
来 自:青岛
等 级:新手上路
帖 子:644
专家分:0
注 册:2006-11-1
得分:0 
scanf("%s",&namel);是这样吗???

Live And Learn !!!
2007-11-27 15:21
木北北
Rank: 1
等 级:新手上路
帖 子:79
专家分:0
注 册:2007-11-24
得分:0 
楼上的意思是说,要是字符的话就加上取地址符是吗?
要是字符串就不用加.能解释一下吗?
我还是有点晕,谢谢了!!
2007-11-27 15:22
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
得分:0 
程序错误!


char namel[10];
    for(i = 0; i < 3; i++)
    {
        scanf("%s",namel);  /* 因为数组名就是地址 */
        if(strcmp(namel, leader[i].name) == 0)
            leader[i].count++;
    }

[[italic] 本帖最后由 cosdos 于 2007-11-27 15:32 编辑 [/italic]]

—>〉Sun〈<—
2007-11-27 15:24
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
得分:0 
/*  修正版 */

#include <stdio.h>
#include <string.h>

struct person
{
    char name[30];
    int count;
} leader[3] = {{"lilin", 0}, {"zhangwen", 0}, {"dacong", 0}};

int main(void)
{
    int i;
    char namel[10];
    for(i = 0; i < 3; i++)
    {
        scanf("%29s",namel);  /* 因为数组名就是地址 */
        if(strcmp(namel, leader[i].name) == 0)
            leader[i].count++;
    }

    printf("\n");
   
    for(i = 0; i < 3; i++)
    {
        printf("%5s, %5d\n", leader[i].name, leader[i].count);
    }

    while(getchar() != '\n');
    getchar();
    return 0;
}

[[italic] 本帖最后由 cosdos 于 2007-11-27 15:32 编辑 [/italic]]

—>〉Sun〈<—
2007-11-27 15:25
MikeFT
Rank: 1
来 自:青岛
等 级:新手上路
帖 子:644
专家分:0
注 册:2006-11-1
得分:0 
取字符串-->scanf("%s",namel);
取字符-->scanf("%c",&namel[i]);

Live And Learn !!!
2007-11-27 15:27
木北北
Rank: 1
等 级:新手上路
帖 子:79
专家分:0
注 册:2007-11-24
得分:0 
OK  明白了!
谢谢楼上两位!
2007-11-27 15:29



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-188745-1-1.html




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

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