将char*数组传递给另一个函数,c中的指针问题

将char*数组传递给另一个函数,c中的指针问题,c,pointers,C,Pointers,嘿,我无法将正确的值存储到CHANNELS char数组中。我真的认为这可能是我的指针的一个简单问题。我“认为”我理解,当您声明char*通道[6]时,您正在创建一个指针数组。因此,我在switch语句case1中通过了第三个参数中的通道,但没有得到正确的值。任何帮助都是伟大的!一些背景:我在读6个“通道”,每个通道有6个二进制值 void binEnter(void *channel, char *CHANNELS[6], int i){ redo: printf("Enter bin

嘿,我无法将正确的值存储到CHANNELS char数组中。我真的认为这可能是我的指针的一个简单问题。我“认为”我理解,当您声明char*通道[6]时,您正在创建一个指针数组。因此,我在switch语句case1中通过了第三个参数中的通道,但没有得到正确的值。任何帮助都是伟大的!一些背景:我在读6个“通道”,每个通道有6个二进制值

void binEnter(void *channel, char *CHANNELS[6], int i){
redo:
    printf("Enter binary value for Channel %d: ",i);
    scanf("%s",(UCHAR *)channel);
    if (strlen(channel)!=6) {
        printf("Error entry must be six digits!\n");
        goto redo;
    }
    char *string = channel;
    int j;
    for (j = 0; j < 6; j++){
        if ((string[j] != '0') && (string[j] != '1')){
            printf("Error did not enter a binary number!\n");
            goto redo;
        }
    }
CHANNELS[i]=channel;
printf("Channel %d is stored as %s\n",i,CHANNELS[i]);
void binEnter(void*通道,char*通道[6],int i){
重做:
printf(“为通道%d:,i输入二进制值”);
扫描频率(“%s”,(UCHAR*)信道);
如果(strlen(频道)!=6){
printf(“错误输入必须是六位数!\n”);
后藤重做;
}
字符*字符串=通道;
int j;
对于(j=0;j<6;j++){
if((字符串[j]!='0')&&(字符串[j]!='1')){
printf(“错误未输入二进制数!\n”);
后藤重做;
}
}
信道[i]=信道;
printf(“通道%d存储为%s\n”,i,通道[i]);
}

intmain(){
int选择;
乌查尔通道0;
UCHAR通道1;
乌查尔通道2;
乌查尔通道3;
乌查尔通道4;
乌查尔通道5;
字符*通道[6];
浮动vRefVal[6];
//字符*数据[5];
浮动电压=0;
做{
开始:
promptUser();
scanf(“%d”,选择(&S);
开关(选择){
案例1:
b输入(&channel0,CHANNELS,0);
b输入(&channel1,CHANNELS,1);
b输入(&channel2,CHANNELS,2);
b输入(&channel3,CHANNELS,3);
b输入(&channel4,CHANNELS,4);
b输入(&channel5,CHANNELS,5);
int i;

对于(i=0;i
UCHAR channel0;

你已通过考试

b输入(&channel0,CHANNELS,0);

bitnenter
的原型是
void-binEnter(void*channel,char*CHANNELS[6],inti)

但是你可以这样做:
scanf(“%s”,(UCHAR*)频道);

  • 如果要将其作为字符串处理,为什么要将其作为
    void*
    传递
  • 您正在尝试输入一个字符串,其中类型为
    UCHAR
    (我假定为无符号字符)。这样做将覆盖从存储在
    通道
    中的地址基开始的内存,并且根据内存分配给自动变量的方式,这些变量将被覆盖,这是一种未定义的行为
  • 尝试动态分配您在
    位输入
    函数中输入的字符串,然后将其添加到
    频道

    int main(){
    int selection;
    UCHAR channel0;
    UCHAR channel1;
    UCHAR channel2;
    UCHAR channel3;
    UCHAR channel4;
    UCHAR channel5;
    char *CHANNELS[6];
    float vRefVal[6];
    //char *data[5];
    float volt =0;
    do {
    start:
        promptUser();
        scanf("%d",&selection);
        switch (selection) {
            case 1:
                binEnter(&channel0, CHANNELS,0);
                binEnter(&channel1, CHANNELS,1);
                binEnter(&channel2, CHANNELS,2);
                binEnter(&channel3, CHANNELS,3);
                binEnter(&channel4, CHANNELS,4);
                binEnter(&channel5, CHANNELS,5);
                int i;
                for (i=0; i<6; i++) {
                    printf("Channel %d is %s in main\n", i, CHANNELS[i]);
                }
                goto start;
    
            case 2:
                goto start;
            case 3:
                enterVolt(&volt);
                printf("Volt = %f\n",volt);
                goto start;
            case 4:
                if (volt) {
                    vRefCal(&volt, CHANNELS, vRefVal);
                    printVref(vRefVal);
                    goto start;
                }
                else{
                    printf("Must enter input Vref first!\n");
                    goto start;
                }
            default:
                break;
        }
    } while (selection!=5);
    return 1;
    }