gpt4 book ai didi

c - 数组 c 上的段错误

转载 作者:太空宇宙 更新时间:2023-11-04 04:17:39 25 4
gpt4 key购买 nike

我是编程新手,这是一项大学作业。我不知道是什么导致了这个段错误,请帮忙。

#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <stdlib.h>

main() {
int i, n;

struct obat {
char nama[10];
char kode[10];
int harga[10];
int stok[10];
};

struct obat o;

printf("Masukan jumlah obat = ");

scanf("%d", &n);

for (i = 0; i < n; i++) {
printf("Masukan nama obat ke-%d", i + 1);
scanf("%s", &o.nama[i]);
}

for (i = 0; i < n; i++) {
printf("Nama obat ke-%d = %s", i + 1, o.nama[i]);
}
}

最佳答案

scanf("%s", &o.nama[i]);

如果 nama 是一个字符数组,您需要的格式说明符是 %c 而不是 %s。 %s 用于字符串,它将尝试将所有输入字符串(直到 nul 终止符)写入您的 char 数组。

因此,如果您的输入是“This Will Segfault”,您将拥有(甚至从 for 循环中的第一个循环开始)

o.nama[0] = T
o.nama[1] = h
o.nama[2] = i
o.nama[3] = s
o.nama[4] = "space" (not the word but the symbol)
o.nama[5] = W
o.nama[6] = i
o.nama[7] = l
o.nama[8] = l
o.nama[9] = "space" (again)
o.nama[10] = S //This is the seg fault most likely, although it may also write into other parts of your struct unintentionally.

如果你想要一个字符串数组而不是一个字符数组,你需要将结构更改为如下所示:

main() {
int i, n;

struct obat {
char nama[10][512]; //the 512 here should be #defined
char kode[10];
int harga[10];
int stok[10];
};

struct obat o;
memset(o, 0, sizeof(stuct obat)); //set your struct to 0 values, important for strings.

printf("Masukan jumlah obat = ");

scanf("%d", &n);

for (i = 0; i < n; i++) { //loops over at most 10 inputs and reads the input string
printf("Masukan nama obat ke-%d", i + 1);
scanf("%s", &o.nama[i][0]);
}

for (i = 0; i < n; i++) {
printf("Nama obat ke-%d = %s", i + 1, o.nama[i][0]);
}
}

关于c - 数组 c 上的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50110160/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com