Argument typu unsigned char jest niezgodny z parametrem typu const char*

0

Witam
piszę program który tworzy nr telefonu z podanej tablicy typu char. Visual studio wyrzuca mi błąd jak w tytule. Czy ktoś może powiedzieć, jak ten kod poprawić

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *create_phone_number(char phnum[15], unsigned char nums[10]);



int main()
{
	unsigned char tab[10] = { '1','1','1','2','2','2','3','3','3','3' };
	char phnum[15] = { 0 };
	printf("%s\n", create_phone_number(phnum, tab));
    return 0;
}

char *create_phone_number(char phnum[15], unsigned char nums[10])
{
	unsigned char *temp = (unsigned char*)malloc(sizeof(unsigned char) * 10);
	strcat(temp,nums);
	strcat(phnum, "(");
	for (int i = 0; i <= 2; i++)
		strcat(phnum, temp[i]);
	strcat(phnum, ") ");
	for (int i = 3; i <= 5; i++)
		strcat(phnum, temp[i]);
	strcat(phnum, "-");
	for (int i = 6; i <= 10; i++)
		strcat(phnum, temp[i]);
	return phnum;
}


1

Szkoda że nie wskazałeś linii z błędem i trzeba było szukać. Zastanów się co oznacza komunikat "typ jabłko jest niezgodny z typem pomarańcza, próbujesz użyć jabłka jako pomarańczy", i wszystko stanie się jasne.

0

Błędy powoduje linia 19, 22,25,28. Jeśli jabłko to char * a pomarańcza to const char * to w którym miejscu próbuję zrobić niedozwoloną operację np zapisywać pod const char*. Do char* próbuję kopiować const char* ale czy to właśnie powoduje błędy?

1

Nie masz tam char, tylko unsigned char.

0

Pobieżnie patrząc:
a) masz wyciek pamięci
b) zakładasz, że alokowany blok ma sensową zawartość, a tak nie jest
c) w tym wąskim przypadku alokowanie nie jest konieczne. Rozmiar bufora roboczego jest określony i jest niewielką liczbą.
d) strcat (cstring, znak) jest błędne, zakładam, że tam są błędy kompilacji

0

Dziękuję za odpowiedzi, ale znalazłem już prostszy i szybszy sposób na napisanie programu.Thx. Ale swoją drogą kod jest pouczający,

1

Ten kod ma dużo więcej problemów niż tylko błąd kompilacji i nie wszystkie są wymienione wyżej.
A największy twój problem, to brak świadomości, że napis musi kończyć się zerem, żeby działały takie funkcje jak strcat.
Czy możesz wyjaśnić co am robić create_phone_number? Z nieprawidłowego kodu trudno to zrozumieć.

1

Może tak prościej i mniej błędogienne.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *create_phone_number(char phnum[],char format[],char nums[])
{
    for(int i=0,n=0;format[i];++i) if(format[i]=='#') phnum[i]=nums[n++]; else phnum[i]=format[i];
    phnum[i]=0;
    return phnum;
}

int main()
{
    char tab[]="1112223333";
    char phnum[15];
    printf("%s\n",create_phone_number(phnum,"(##)###-##-###",tab));
    return 0;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1