Chơi với con trỏ trong C
là thú vị (không thực sự).Con trỏ tới mảng chuỗi trong C
Tôi có một vài mảng các chuỗi tôi muốn tuyên bố một cách dễ dàng, tốt nhất là một cái gì đó như:
arrayOfStrings1 = {"word1", "word2", etc. };
arrayOfStrings2 = {"anotherword1", "anotherword2", etc. };
arrayOfStrings3 = etc.
etc.
Something tương tự như một mảng dịch (nhưng không hoàn toàn), vì vậy tôi muốn để có thể trao đổi giữa chúng trong thời gian chạy. Cho rằng tôi muốn có một con trỏ pointerToArrayOfStrings
mà tôi có thể trao đổi như:
pointerToArrayOfStrings = arrayOfStrings1;
doStuff();
pointerToArrayOfStrings = arrayOfStrings2;
doSomeOtherStuff();
Trong sự hiểu biết ngây thơ của tôi về mảng các chuỗi và con trỏ vào đó, đây là những gì tôi đã cố gắng:
// Danish transforms
const unsigned char* da_DK[] = {"b","bb","c","c","cc","d","dd","e","f","ff","g","gg","h","hh","j","j","jj","k","k","kk","l","l","l","l","ll","m","mm","n","n","nn","p","pp","r","r","r","rr","s","s","s","ss","t","t","tt","v","v","vv","æ"};
// British english transforms
const unsigned char* en_GB[] = {"a","a","a","a","a","a","a","a","a","a","a","a","a","age","ai","aj","ay","b","cial","cian","cian","dj","dsj","ea","ee","ege","ei","ei","eigh","eigh","f","f","f","g","g","gs","i","i","i","j","j","k","ks","kw","l","m","n","n","o","r","s","s","sd","sdr","sion","sion","sj","sj","tial","tion","tion","tj","u","u","u","u","w","ye","ye","z"};
// More languages....
const unsigned char** laguageStrings;
// Assign language
if (streq(language, "da-DK")){
laguageStrings= da_DK;
}
else if (streq(language, "en-GB")){
laguageStrings= en_GB;
}
else
return 0;
}
Ngôn ngữ là một char *
có chứa ngôn ngữ "en-GB", "da-DK", v.v. streq()
chỉ là một nhà ủ (hơi nhanh hơn strcmp()
) chức năng so sánh chuỗi.
Câu chuyện dài ngắn, tùy thuộc vào trình biên dịch phương pháp này có thể hoạt động, báo cáo cảnh báo trình biên dịch hoặc biên dịch, nhưng cho kết quả không mong muốn.
Cách chính xác để giải quyết vấn đề này là gì?
Sự cố là gì? –
Bạn nên kết thúc mảng chuỗi của bạn với một con trỏ NULL để bạn có thể duyệt chúng một cách hợp lý: 'const char * strs [] = {" aa "," bb ", NULL};' –
Tùy thuộc vào trình biên dịch nó không hoạt động.Trình biên dịch GNU GNU thích nó và hoạt động, XCODE không và tạo ra một số lỗi lạ. – Woodgnome