[英]Getting a segmentation fault in C with usage of strings, pointers, and functions
编辑:解决了它,原来我应该使用 %c
而不是 %s
因为foodSelect和foodSize是不是字符串的字符:P谢谢
我试图将3个值传递给函数output
:foodChoice,foodSelect,foodSize(以及foodOrderNum和foodSubtotal,但我还没有解决这个问题)。
但是,当我尝试foodSelec
t时,出现了段错误,但是当我尝试打印foodChoice
,却没有。 当我尝试printf foodSize
它什么也没显示。
资源:
#include <stdio.h>
#include <string.h>
void question (char choice[]);
int output(char *foodChoice, char *foodSelect, char *foodSize);
void question (char choice[]) {
char choiceYesNo;
char *foodOptions;
char *foodChoice;
char *foodSelect;
char *foodSize;
int foodOrderNum = 0;
float foodSubtotal = 0;
switch (choice[0]) {
case 'f':
foodChoice = "Fish";
foodOptions = "(K- Haddock, T- Halibut)";
break;
case 'c':
foodChoice = "Chips";
foodOptions = "(C- Cut, R- Ring)";
break;
case 'd':
foodChoice = "Drinks";
foodOptions = "(S- Softdrink, C- Coffee, T- Tea)";
break;
}
printf("Do you order %s? (Y/N): ", foodChoice);
scanf("%c", &choiceYesNo);
printf("%s choice %s: ", foodChoice, foodOptions);
scanf("%s", &foodSelect);
printf("What size (L - Large, M - Medium, S - Small): ");
scanf("%s", &foodSize);
printf("How many orders do you want? (>=0): ");
scanf("%d", &foodOrderNum);
output(foodChoice, foodSelect, foodSize);
}
int output(char *foodChoice, char *foodSelect, char *foodSize) {
// printf("You ordered %s: %s - SIZE: %s amount ordered: , subtotal price: \n",
// foodChoice, foodSelect, foodSize);
printf("\n\n%s\n", foodSelect);
// printf("\n\n%s\n", foodSelect);
}
int main() {
question("chips");
}
您尚未为以下项分配内存:
char * foodOptions; char * foodChoice; char * foodSelect; char * foodSize;
执行malloc并分配内存。 注意:
char *foodChoice="Fish";
和
char *foodChoice;
foodChoice="Fish";
不一样。
这是因为您将&foodSelect
传递给scanf
,这对于C字符串是不正确的。 您应该通过foodSelect
代替,不要使用&号。
您还应该分配足够的空间来存储用户输入的值,并指示scanf
有关缓冲区的最大大小。
#define MAX_BUF 128
...
char foodSelect[MAX_BUF];
...
scanf("%127s", foodSelect);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.