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

c - printf ("%s\n",str); đưa ra một segfault nhưng printf ("%s",str); thì không, trong đó "str" ​​​​là một con trỏ chuỗi

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

Khi tôi cố chạy đoạn mã sau:

#include 
khoảng trống chính()
{
char *a[10] = {"xin chào", "xin chào", "thế nào"};
int i = 0, j = 0;
a[0] = "này";
vì (i = 0;i < 10; i++)
printf("%s", a[i]);
}

Nó mang lại cho tôi đầu ra:

xin chào, thế nào(null)(null)(null)(null)(null)(null)(null)

Và khi tôi chèn '\n' vào câu lệnh printf:

#include 
khoảng trống chính()
{
char *a[10] = {"xin chào", "xin chào", "thế nào"};
int i = 0, j = 0;
a[0] = "này";
vì (i = 0;i < 10; i++)
printf("%s\n", a[i]);
}

Nó mang lại cho tôi kết quả đầu ra sau:

Chào
hello
how
Lỗi phân đoạn

Tôi đã thử đọc trực tuyến và phát hiện ra rằng điều này là do trình xác định định dạng và trình biên dịch tự động chuyển đổi printf 转换为 putsputs không biết "%s\n", nhưng tôi vẫn không thể hiểu được. Bất cứ ai có thể giải thích nó bằng thuật ngữ đơn giản.

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

hiện hữu in() Trung Vệ %s Đó là hành vi không xác định đối với trình xác định định dạng để truyền con trỏ null. Trong một trường hợp, thời gian chạy đã cố gắng hoạt động tốt và hiển thị "(null)" cho trường hợp này. Trong trường hợp khác, hành vi không xác định là sự cố.

Một lý do có thể cho sự khác biệt này là các chuỗi công cụ biên dịch đôi khi chuyển đổi printf("%s\n", xxx) được chuyển đổi tương đương đặt(xxx) (GCC chắc chắn thực hiện điều này trong nhiều trường hợp). tôi đoán đặt() Không thân thiện lắm với con trỏ null của bạn.

Cá nhân tôi thích "%S" Hiển thị con trỏ null là "(null)" - sẽ thuận tiện hơn khi thêm một số ghi nhật ký gỡ lỗi nhanh. Tuy nhiên, nếu làm như vậy, bạn sẽ không thể nhắc khi chương trình gặp sự cố, vì vậy bạn không nên dựa vào nó để làm bất cứ việc gì khác.

Về c - printf ("%s\n",str); đưa ra một segfault nhưng printf ("%s",str); thì không, trong đó "str" ​​​​là một con trỏ chuỗi, chúng tôi đã tìm thấy một con trỏ tương tự trên Stack Câu hỏi tràn: https://stackoverflow.com/questions/33268545/

28 4 0
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