Вам нужно передать размер буфера вместе с указателем.
int
ascii_to_morse(lookuptable *table,
char* morse, int morse_size,
char* ascii);
Размер буфера не обязательно совпадает с текущей длиной строки (которую вы можете найти с помощью strlen).
Функция, как указано выше, будет читать строку ascii (не нужно знать размер буфера, чтобы она не передавалась) и записывать в буфер, на который указывает morse, размера morse_size. Возвращает количество записанных байтов (не считая нуля).
Редактировать: Вот реализация этой функции, которая, хотя она не в состоянии использовать правильные значения для кода Морзе, показывает, как управлять буфером:
typedef void lookuptable; // we ignore this parameter below anyway
// but using void lets us compile the code
int
ascii_to_morse(lookuptable *table,
char* morse, int morse_size,
char* ascii)
{
if (!ascii || !morse || morse_size < 1) { // check preconditions
return 0; // and handle it as appropriate
// you may wish to do something else if morse is null
// such as calculate the needed size
}
int remaining_size = morse_size;
while (*ascii) { // false when *ascii == '\0'
char* mc_for_letter = ".-"; //BUG: wrong morse code value
++ascii;
int len = strlen(mc_for_letter);
if (remaining_size <= len) { // not enough room
// 'or equal' because we must write a '\0' still
break;
}
strcpy(morse, mc_for_letter);
morse += len; // keep morse always pointing at the next location to write
remaining_size -= len;
}
*morse = '\0';
return morse_size - remaining_size;
}
// test the above function:
int main() {
char buf[10];
printf("%d \"%s\"\n", ascii_to_morse(0, buf, sizeof buf, "aaa"), buf);
printf("%d \"%s\"\n", ascii_to_morse(0, buf, sizeof buf, "a"), buf);
printf("%d \"%s\"\n", ascii_to_morse(0, buf, sizeof buf, "aaaaa"), buf);
return 0;
}