ice_cream0_0 2015-02-08 12:25 采纳率: 0%
浏览 4495

error C2440:无法从“const char [5]”转换为char [20]”

图片说明
我想写一个根据输入即时查询的功能,但是这里报错了,

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
struct record
{
    char name[20];
    char number[20];
}NumberInfo[500];//通讯录列表
int NO;
int j;
FILE *fp;
void main(){
    NO=10;
    for(int i =0;i<10;i++){
         NumberInfo[i].name = "张三";//给联系人赋值
         NumberInfo[i].number="13701234567";


    }
    sort();
    find();



}
void sort()//排序
{
    int i,j;
    struct record s;
    int flag=1;
    for(i=0;i<NO-1&&flag;i++){
        flag=0;
        for(j=NO-2;j>=i;j--){
            if(strcmp(NumberInfo[j].name,NumberInfo[j+1].name)>0){
                s=NumberInfo[j];
                NumberInfo[j]=NumberInfo[j+1];
                NumberInfo[j+1]=s;
                flag=1;
            }
        }
    }
}

void find(){//查找
    char i;
    char shuru[20];
    j=0;
    printf("请输入你要查找的用户名\n");
    if(scanf("%c",&i)!='\0'){//及时根据输入查询联系人
        shuru[j]=i;
        j++;
        found(shuru);
    }
}

void found(char s[]){
    for(int i=0;i<NO;i++){
        if(strstr(NumberInfo[i].name,s)!=NULL){
            printf("%s: %s\n",NumberInfo[i].name,NumberInfo[i].number);
        }
    }
    printf("%s",s);
} 

想问一下,这是什么问题?该怎么解决?

  • 写回答

6条回答 默认 最新

  • ljianhui 2015-02-08 14:45
    关注

    在C语言中,不支持这种对数组的直接赋值,因为数组表示一段内存,而不是一个变量。所以需要使用相关的函数把字符串(同样对应着一段内存)的内容复制到该数组对应 的内存中,如:
    strcpy(NumberInfo[i].name, "张三");
    strcpy(NumberInfo[i].number, "13701234567");

    若你的字符串不需要改变,可以使用char*(字符指针)来代替字符数组,如const char *name,这样就可以这样使用
    name = "张三";
    因为字符指针是一个指针变量,可以指向"张三"这一段的内存。

    评论

报告相同问题?

悬赏问题

  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制