cuốn sách gpt4 ai đã làm

c - scanf 用下一个 scanf 输入替换 char 数组中的最后一个元素

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-04 05:36:00 28 4
mua khóa gpt4 Nike

Tôi gặp một vấn đề, khi tôi sử dụng scanf để lưu một chuỗi vào một con trỏ char, tôi có 3 đầu vào - tên, họ và tuổi, giá trị char cuối cùng của họ được thay thế bằng đầu ra tuổi để giải thích rõ hơn.

Độ nhạy Q v0.0.1
Nhập tên của bạn
Evgeny

Nhập họ của bạn
Danilenko

Nhập tuổi của bạn
hai mươi hai

Evgeny Danilenk22, bạn 22 tuổi

đây là mã

void getUserDetails(char** value)
{
char *key[3] = {"tên", "họ", "tuổi"};
int keySize = sizeof(key)/sizeof(char*);
printf("Q-riosity v0.0.1\n");

int i = 0;

for(i = 0; i
{
printf("Nhập %s \n", key[i]); // tên, họ, tuổi
scanf("%s", &value[i]); //lưu trữ giá trị tại chỉ mục i
}

printf("%s, %s, bạn %s tuổi\n", &value[0], &value[1], &value[2]);
}

biên tập

nhập tên của bạn
Yevgeny

Nhập họ của bạn
Danilenko

Nhập tuổi của bạn
hai mươi hai

lỗi phân biệt

int main(int argc, char* argv[])
{

char *key[3] = {"tên", "họ", "tuổi"};
int keySize = sizeof(key)/sizeof(char*);
printf("Q-riosity v0.0.1\n");
giá trị char*[keySize];

int i = 0;
for(i = 0; i
{
printf("Nhập %s \n", key[i]);
scanf("%s", value[i]);
}


for(i = 0; i
{
printf("%s : %s \n", key[i], value[i]);
}


return 0;
}

câu trả lời hay nhất

Vâng, đầu ra Danielk22 cho biết của bạn value Biến được khai báo trong lệnh gọi dưới dạng mảng ký tự liền kề có kích thước 8.

khi bạn đọc Danilenko Phần họ bạn viết 10 ký tự (kể cả dấu kết thúc \0. 8 cái đầu tiên điền vào mảng lưu giữ và 2 cái cuối cùng điền vào tuổi mảng. Khi đọc tuổi sau này nó sẽ ghi đè lên 2 ký tự này.

Hãy nhìn vào bộ nhớ (? là viết tắt của các ký tự đơn vị hoặc không liên quan):

   0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
Và thế hệ ? ?
E vgeny \0 ? D anilenko \0 ?
E vgeny \0 ? D anilenk 2 2 \0 ?

Nhưng trên kiến ​​trúc 64-bit, tám ký tự cũng có thể có kích thước bằng một con trỏ...

Chỉnh sửa của bạn cho thấy rằng bạn đã không khởi tạo đúng cách con trỏ value mảng. Giả sử bạn muốn tên và họ có 32 ký tự và tuổi là 4 ký tự, bạn có thể làm điều này:

char _v0[32], _v1[32], _v2[4];
giá trị char*[keySize] = { _v0, _v1, _v2 };

Bằng cách này, chương trình sẽ không còn bị lỗi nữa.

Về việc c - scanf thay thế phần tử cuối cùng trong mảng char bằng đầu vào scanf tiếp theo, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/36132079/

28 4 0
Bài viết khuyến nghị: Lưu đầu ra tập lệnh shell Bash vào tệp bằng chuỗi
Bài viết khuyến nghị: Chương trình C - Trả về 0 gấp đôi
Bài viết khuyến nghị: c - segfault - sprintf
Bài viết khuyến nghị: query.group theo trong Django 1.9
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress