文字列への char ポインターに変換しようとしている char 配列があります。これには、char配列の最初の要素へのポインターを取得し、char配列の末尾にnull文字を追加することが含まれると思います。この理由は、文字列を指す を取得する必要がSimpleMenuItem
ある小石スマートウォッチの にそれを渡そうとしているためです。.title
char*
char配列を埋めることができ、(私が思うに)null文字を追加してポインターを取得できましたが、小石にタイトルが表示されません。これが小石の問題なのか、私のCの理解の問題なのかはわかりませんが、前者かもしれないと強く感じています。
小石コード (C):
void in_received_handler(DictionaryIterator *received, void *context) {
dataReceived = dict_read_first(received);
APP_LOG(APP_LOG_LEVEL_DEBUG, "read first");
while (dataReceived != NULL){
if (dataReceived->key == 0x20) {
//original is of the format "# random string", i.e. "4 test name"
char* original = dataReceived->value->cstring;
APP_LOG(APP_LOG_LEVEL_DEBUG, original);
char originalArray[strlen(original)];
//copy over to originalArray
for (unsigned int i = 0; i < strlen(original); i++) {
originalArray[i] = original[i];
}
char* keysplit = strtok(originalArray, " ");
APP_LOG(APP_LOG_LEVEL_DEBUG, keysplit);
//key
int key = atoi(keysplit);
APP_LOG(APP_LOG_LEVEL_DEBUG, "Int Key: %d", key);
//good until here
char remainderArray[sizeof(originalArray)-strlen(keysplit) +1];
//assign rest of string to new array
for (unsigned int i = 1; i < sizeof(remainderArray)-1; i++){
APP_LOG(APP_LOG_LEVEL_DEBUG, "Character : %c", originalArray[i+strlen(keysplit)]);
remainderArray[i] = originalArray[i+strlen(keysplit)];
APP_LOG(APP_LOG_LEVEL_DEBUG, "Character in new Array: %c", remainderArray[i]);
}
remainderArray[sizeof(remainderArray)-1] = '\0';
//data is sucesfully placed into remainderArray
char* ptr = remainderArray;
strncpy(ptr, remainderArray, sizeof(remainderArray)+1);
ptr[sizeof(remainderArray)+1] = '\0';
chats[key] = (SimpleMenuItem){
// You should give each menu item a title and callback
.title = &remainderArray[0],
.callback = selected_chat,
};
}
dataReceived = dict_read_next(received);
APP_LOG(APP_LOG_LEVEL_DEBUG, "read again");
}
layer_mark_dirty((Layer *)voice_chats);
}
で割り当てられているデータが小石に表示されない理由について何か提案がある場合は.title
、ぜひ聞いてください。
ありがとう!