int main(void) {
char testStr[50] = "Hello, world!";
char revS[50] = testStr;
}
Tôi gặp lỗi: "trình khởi chạy không hợp lệ" trên dòng với revS
. Tôi đang làm gì sai?Tôi nhận được "Trình khởi tạo không hợp lệ", tôi đang làm gì sai?
int main(void) {
char testStr[50] = "Hello, world!";
char revS[50] = testStr;
}
Tôi gặp lỗi: "trình khởi chạy không hợp lệ" trên dòng với revS
. Tôi đang làm gì sai?Tôi nhận được "Trình khởi tạo không hợp lệ", tôi đang làm gì sai?
Vì bạn không thể khởi tạo như vậy, bạn cần biểu thức liên tục làm giá trị khởi tạo. Thay thế bằng:
int main (void) {
char testStr[50] = "Hello, world!";
char revS[50]; strcpy (revS, testStr);
:
}
Hoặc, nếu bạn thực sự muốn khởi động, bạn có thể sử dụng một cái gì đó như:
#define HWSTR "Hello, world!"
int main (void) {
char testStr[50] = HWSTR;
char revS[50] = HWSTR;
:
}
này cung cấp một biểu hiện thường xuyên với sự trùng lặp tối thiểu trong nguồn của bạn.
Trình khởi tạo cho số char[]
cần phải là chuỗi ký tự bằng chữ hoặc số như {1,2,3,4}
. Nó không được phép là tên của một biến khác.
Mảng không thể gán được.
Bạn nên sử dụng memcpy để sao chép nội dung từ testStr
để revS
memcpy(revS,testStr,50);
biểu thức Chỉ liên tục có thể được sử dụng để khởi tạo mảng, như trong khởi tạo lại testStr
.
Bạn đang cố gắng khởi tạo revS
với biến mảng khác, là không phải là một biểu thức không đổi. Nếu bạn muốn sao chép nội dung của chuỗi đầu tiên vào chuỗi thứ hai, bạn sẽ cần sử dụng strcpy
.
Bạn đang làm
char revS[50] = testStr;
đó là sai vì bạn không thể gán char *
để char
.
Hãy thử revS = testStr;
nó sẽ hoạt động.
Trừ khi bạn có kế hoạch thao tác mảng thứ hai bạn cũng có thể sử dụng một con trỏ:
int main(void){
char textStr[50] = "hello worlds!";
char *revS = textStr;
printf("%s\n", revS);
}
Nếu bạn muốn nhận được thực sự điên rồ bạn có thể trỏ đến một địa điểm cụ thể trong mảng với nhà điều hành tham chiếu:
int main(void){
char textStr[50] = "hello worlds!";
char *revS = &textStr[5];
printf("%s\n", revS);
}