此问题在此处已有答案:
Segmentation fault when returning pointers [duplicate](1个答案)
9天前关闭。
这是我在大学编程课上做的一个项目的代码片段,我的问题是,当我到达strcpy
部分时,我得到了一个分段错误,我不知道为什么。
我不知道这是否相关,但我在linux下用vs代码编码。
代码如下:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
typedef struct Teams {
char country[20];
char sponsor[20];
char group;
int points;
} E;
char *sponsor_generator(char *country) {
int i, k = 0;
char sp[20];
for (i = strlen(country) - 1; i >= 0; i--) {
sp[k] = country[i];
k++;
}
sp[k] = '\0';
return sp;
}
void read(E *ec, int *n) {
(*n)++;
printf("Country: ");
scanf("%s", (ec + *n)->country);
(ec + *n)->group = (ec + *n)->country[0];
do {
printf("Number of points: ");
scanf("%d", &(ec + *n)->points);
} while ((ec + *n)->points >= 10);
strcpy((ec + *n)->sponsor, sponsor_generator((ec + *n)->country));
}
int main() {
int n = -1;
E ec[64];
read(ec, &n);
return 0;
}
我试着查找任何解决方案,但我没有找到任何可行的方法。
1条答案
按热度按时间oug3syen1#
您的代码中存在多个问题:
sponsor_generator
返回一个指向本地数组的指针,该指针在函数返回后立即变为无效。sponsor_generator
应将目标数组作为参数。read
可能与使用相同名称的POSIX系统调用冲突。请使用其他名称。scanf("%s", (ec + *n)->country);
可能会导致缓冲区溢出。请始终指定限制并测试返回值:E
是个坏主意:使用结构标签Team
将提高可读性。以下是修改后的版本: