2017-03-22 4 views
1

Code:courte: conversion non valide du char const char *

void setup(){ 
Serial.begin(19200); 
static char value [20] = "20:17:12"; 
setSimTime(value); 
} 

void setSimTime(char* incoming){ 
    char dateTime[20]; 
    strcat(dateTime, "20"); 
    strcat(dateTime, incoming[0-1]); 
    Serial.println(dateTime); 
} 

Quelle est la bonne façon de le faire? Toute aide est appréciée

+3

'incoming [0-1]' Que pensez-vous de cela? Vous essayez d'accéder à l'index '-1' dans un tableau, ce qui n'a aucun sens. – BoBTFish

+0

@BoBTFish J'essayais d'accéder 0 à 1 – sdd

+0

Quelle ligne vous obtenez l'erreur dans le titre? – Rama

Répondre

1

En utilisant strcat(dateTime, incoming[0-1]);, où incoming[0-1] est la même que celle incoming[-1] provoque un comportement non défini. En fait incoming[-1] est le seul caractère situé à l'index de tableau -1, c'est la cause de l'erreur, le compilateur ne peut pas convertir un seul caractère (char) en un pointeur char (char*).

utiliser:

strncat(dateTime, incoming, 2); 

note la n dans strncat. Cela va concaténer au plus deux caractères de incoming à dateTime, et mettre un caractère nul de terminaison.

Extension

Vous pouvez étendre à:

strncat(dateTime, incoming + n, l); 

n est l'indice de départ, à savoir zéro avant et l est la longueur maximum de copier.

Exemple

Donc, si vous quoi concaténer les caractères avec des index 3 et 4 faire:

strncat(dateTime, incoming + 3, 2); 
+0

Merci, et si je veux accéder à 3 à 4? – sdd

+0

J'ai mis à jour la réponse – Jonas

+0

Merci. J'utilise le dateTime donc configurez l'horloge RTC: clock.setDateTime (dateTime); mais cela donne l'erreur: conversion non valide de 'char *' en 'uint32_t. Avez-vous une chance de savoir pourquoi? – sdd

1

Le message d'erreur exact provient du fait que incoming[0-1] est de type char, mais strcat attend un const char* en tant que deuxième paramètre, qui est un pointeur vers un char.

Le const supplémentaire n'est pas un problème ici, car les valeurs non const peuvent toujours être converties en valeurs const. Voir les autres réponses/commentaires sur l'invalidité incoming[0-1].