2017-01-02 2 views
-9

Это то, что я пытаюсь сделать, но мой код либо не компилируется, либо дает мне неожиданный вывод «BC», а не просто «B».Как передать массив «по ссылке» в C?

#include <stdio.h> 

void removeFirstAndLastChar(char** string) { 
    *string += 1; // Removes the first character 
    int i = 0; 
    for (; *string[i] != '\0'; i++); 
    *string[i - 1] = '\0'; 
} 

int main(void) { 
    char* title = "ABC"; 
    removeFirstAndLastChar(&title); 
    printf("%s", title); 
    // Expected output: B 
    return 0; 
} 

Я просмотрел много ответов здесь, связанных с передачи указателей по ссылке, но ни один из них, казалось, содержат операции, которые я хочу сделать в моей removeFirstAndLastChar функции().

+3

Неопределенное поведение при попытке изменить строковый литерал. – EOF

+1

Вы должны изменить 'char * title =" ABC ";' to 'char title [] =" ABC ";' – mch

+1

Вам нужно '(* string) [i]' вместо '* string [i]'. –

ответ

2

Я не сужу о ваших алгоритмах или соглашениях, друзья, которые комментируют вашу проблему, совершенно правы. Но если вы все равно это сделаете, вы можете использовать этот подход.

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

void removeFirstAndLastChar(char* string) { 
    memmove(string,string+1,strlen(string)); 
    string[strlen(string)-1]=0; 
} 

int main(void) { 
    char title[] = "ABC"; 
    removeFirstAndLastChar(title); 
    printf("%s", title); 
    // Expected output: B 
    return 0; 
} 
Смежные вопросы