2012-06-15 36 views

Trả lời

19

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.

2

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.

7

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); 
4

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.

1

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.

0

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); 
} 
Các vấn đề liên quan