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