2016-09-21 3 views
-2

Я пытаюсь разрезать строку и скопировать эту новую разрезанную часть.Нарезка и копирование строки в C

char* makeWord(char *c, int j, int i){ 

    char *s; 
    s = malloc(sizeof(char)*i-j) 
    int k; 
    for (k = 0; k < i - j; k++){ 
     s[k] = c[j+k]; 
    } 

    printf("%s ", s); 

    return s; 
} 

Я пытаюсь вернуть указатель, который копирует соответствующую часть исходной строки.

Печатает странные символы в конце.

Пример:

c[] = "hello darkness my old friend" 
makeWord(c, 0, 5); makeWord(c, 6,14); makeWord(c, 15, 17); makeWord(c, 18, 21); 

Формирует: привет darknessmt_'3 MyP старого friendP

Спасибо, извините за вопрос новичка.

+3

Что строки заканчиваются? У вашего 's' чего-то не хватает. – user2357112

+2

'sizeof (char)' избыточно, поскольку он всегда один –

+1

рассматривает использование более значимых имен переменных, чем 'i' и' j' –

ответ

1

Для допустимой строки в C требуется нуль-терминатор.

Для того, чтобы сохранить его, необходимо добавить malloc() и сохранить строку с \0 после последнего символа.

+0

спасибо. –

0
  1. Если вам нужно выделить строку буфер для хранения n символов, вам нужно n+1 символов, дополнительные один для завершающего нулевого символа, '\0'. Также помните, что вам нужно установить терминатор самостоятельно.

  2. sizeof(char) всегда 1 определяется стандартом.

Попробуйте это:

char* makeWord(char *c, int start, int end) { 

    char *s = malloc(end - start + 1); 
    if (!s) return NULL; 
    int k; 
    for (k = 0; k < end-start; k++){ 
     s[k] = c[start+k]; 
    } 
    s[k] = '\0'; 

    printf("%s ", s); 

    return s; 
} 
Смежные вопросы