2012-01-01 28 views
9

Nhưng vấn đề là, có chính xác số lượng initializers trong mảng char mà tôi tuyên bố.Quá nhiều initializers cho char [9] [9]

char dash[9][9]={ 
     {"1","2","3","4","5","6","7","8","9"}, 
     {"a","b","c","d","e","f","g","h","i"}, 
     {"q","w","e","r","t","y","u","i","o"}, 
     {"9","8","7","6","5","4","3","2","1"}, 
     {"i","h","g","f","e","d","c","b","a"}, 
     {"o","i","u","y","t","r","e","w","q"}, 
     {"z","x","y","w","v","u","t","s","r"}, 
     {"a","l","l","s","t","a","r","p","y"}, 
     {"m","o","n","d","o","l","o","r","i"} 
    }; 

Có chín hàng chín cột. Vấn đề của tôi là gì? Tôi đã kiểm tra các diễn đàn khác và câu trả lời này để tìm câu trả lời nhưng không tìm thấy gì hữu ích.

Trả lời

9

Bạn cần thay đổi tất cả các dấu ngoặc kép của mình "" thành dấu ngoặc đơn ''.

Nếu không, chúng là các chuỗi thay vì char s.

Trong trường hợp này, việc tìm và thay thế đơn giản sẽ thực hiện thủ thuật.

14

Bạn đang khởi tạo mảng bằng chuỗi, chứ không phải ký tự, do đó mỗi phần tử đang cố gắng vừa với ký tự char và một terminator rỗng. Hãy thử '1', '2', '3', vv

1

Sử dụng dấu nháy đơn thay vì:

char dash[9][9]={ 
    {'1','2','3','4','5','6','7','8','9'}, 
    {'a','b','c','d','e','f','g','h','i'}, 
    {'q','w','e','r','t','y','u','i','o'}, 
    {'9','8','7','6','5','4','3','2','1'}, 
    {'i','h','g','f','e','d','c','b','a'}, 
    {'o','i','u','y','t','r','e','w','q'}, 
    {'z','x','y','w','v','u','t','s','r'}, 
    {'a','l','l','s','t','a','r','p','y'}, 
    {'m','o','n','d','o','l','o','r','i'} 
}; 
0

Nếu bạn sử dụng dấu ngoặc kép, nó được thực hiện như thế này ...

char dash[9][9] = 
{ 
    "123456789", 
    "abcdefghi", 
    "qwertyuio", 
    "987654321", 
    "ihgfedcba", 
    "oiuytrewq", 
    "zxywvutsr", 
    "allstarpy", 
    "mondolori" 
}; 

Nếu không, hãy sử dụng dấu nháy đơn. Lưu ý rằng bạn có thể nhận được cảnh báo như

error: initializer-string for array of chars is too long [-fpermissive] 

từ G ++ 4.6.2 (tùy chọn trình biên dịch -Wall -Wextra).

+0

cảm ơn bạn Johnathon, tôi không nên cố gắng tắt câu trả lời của mình. –

+2

C cho phép một mảng 'char [9]' được khởi tạo với một chuỗi ký tự có độ dài chính xác là 9; mảng kết quả không phải là null kết thúc (tức là, nó không phải là một chuỗi). C++ không cho phép điều này, và một trình biên dịch khác với G ++ cũng có thể từ chối hoàn toàn mã. (Ngoài ra, bạn cần dấu phẩy giữa các chuỗi ký tự; nếu không, bạn có một chữ số 81 ký tự. Tôi sẽ tiếp tục và thêm dấu phẩy.) –

0

Bạn không nên sử dụng dấu ngoặc đơn ' thay vì dấu ngoặc kép "?

-2

Thay đổi char thành char * và để lại dấu ngoặc kép. Khi bạn muốn sử dụng nó làm ký tự, hãy đưa nó trở lại làm ký tự. Bằng cách này, bạn có thể có cả ký tự và mảng ký tự (chuỗi).

+1

Ý tưởng thú vị - thay đổi người khai báo thay vì bộ khởi tạo. Chắc chắn, bạn sẽ không cast bất cứ thứ gì khi bạn muốn một 'char'; bạn muốn dereference 'char *' trong mảng: '* dash [i] [j]' hoặc thậm chí 'dấu gạch ngang [i] [j] [0]'? Giải pháp này sẽ tăng đáng kể dung lượng lưu trữ cần thiết cho mảng, từ 81 byte đến '81 con trỏ cộng với 81 chuỗi 2 byte mỗi '(gấp 6 hoặc 10 lần dung lượng lưu trữ tùy thuộc vào việc bạn có 32 bit hay 64 bit) hệ thống). –

+0

Vâng, tôi đã chỉ đưa ra gợi ý đó để cho thấy rằng có một cách khác để thao tác mảng. Nhưng tất nhiên, tôi đồng ý rằng có thêm một chi phí lưu trữ khi giới thiệu con trỏ. –

+0

Việc tạo một 'char *' thành 'char' sẽ cung cấp cho bạn một số giá trị được xác định thực hiện, có khả năng là byte thứ tự thấp của địa chỉ bộ nhớ. Làm thế nào là hữu ích? –

2

Thay đổi từ các chuỗi (") thành ký tự, Sử dụng dấu nháy đơn (') để thay thế.

char dash[9][9]={ 
     {'1','2','3','4','5','6','7','8','9'}, 
     {'a','b','c','d','e','f','g','h','i'}, 
     {'q','w','e','r','t','y','u','i','o'}, 
     {'9','8','7','6','5','4','3','2','1'}, 
     {'i','h','g','f','e','d','c','b','a'}, 
     {'o','i','u','y','t','r','e','w','q'}, 
     {'z','x','y','w','v','u','t','s','r'}, 
     {'a','l','l','s','t','a','r','p','y'}, 
     {'m','o','n','d','o','l','o','r','i'} 
    };