我在使用此函数返回字符串时遇到问题:
char setup(){
puts("Please select a size for the string");
scanf("%d", &size);
getchar();
char sequence[size];
printf("Please write any sequence of %d numbers\n", size);
fgets(sequence, size+1, stdin);
return *sequence;
}
将大小设置为全局变量。 主要是:
int main(){
int program=0;
char sequence_alt[size];
puts("Please select the number of the program to test:");
scanf("%d", &program);
getchar();
switch(program){
case 1:
sequence_alt[size]=setup();
break;
开关继续,但在这种情况下没有添加任何其他内容。如果我选择大小5,而不是获得完整的字符串,如12345,我只得到第一个字符。 我已经搜索了很多指南,但是我仍然无法理解问题是否真的在我的函数中,或者当我打印序列的值时我的主要问题。任何小费和帮助都会很棒,而且我会永远感激不尽。对不起,如果代码太简陋,但我仍然在学习C时迈出了我的第一步。
谢谢!
答案 0 :(得分:1)
您的函数必须返回char *
(不是char
}
char setup(){
...
return *sequence;
}
应该是
char *setup(void){
...
return sequence;
}
char sequence[size];
sequence
是一个本地数组,当函数结束时,它的生命周期结束,使用动态内存:
char *sequence = malloc(size);
在size+1
中使用fgets
,您可以在数组的边界外写字,更改
fgets(sequence, size+1, stdin);
到
fgets(sequence, size, stdin);
答案 1 :(得分:0)
就像上面解释的那样,你的函数应该返回char *来获取一个字符串(char指针),你也应该知道你从函数返回时在函数块中创建的任何内容都会消失。所以序列只能返回第一个字符,即使它是char *,因为没有为该字符串的字符串分配内存。以下将正常工作
char* setup(){
puts("Please select a size for the string");
scanf("%d", &size);
getchar();
char *sequence = malloc(sizeof(int) * size);
printf("Please write any sequence of %d numbers\n", size);
fgets(sequence, size+1, stdin);
return sequence;
}