Я пытался выяснить метод подстроки, такой как сращивание Python, например. 'Привет' [2: 4].Нарезка в C по сравнению с Python
OLD: Указатели new
и toret
(вернуться) то же самое, но при хранении в hello
, имеет новый адрес. Есть ли способ сохранить адрес и распечатать фрагмент?
NEW: Каков наилучший способ поместить символы в буфер?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//char * substr(char *str, int start, int end);
//void substr(char *str, int start, int end);
void get_substr(char *str, int start, int end, char *buffer);
int main() {
char word[] = "Clayton";
char buffer[15];
printf("buffer is now %s",get_substr(word,2,5,buffer);
return 0;
}
void get_substr(char *str, int start, int end, char *buffer) {
int length = end - start;
printf("length %d\n",length);
//char buffer[length]; //init normal array
//assign values from *str
int i;
for (i = 0; i < length; i++) {
buffer[i] = *(str+i+start);
}
}
//char * substr(char *str, int start, int end) {
/* char * substr(char *str, int start, int end) {
int length = end - start;
printf("length %d\n",length);
char buffer[length]; //init normal array
//assign values from *str
int i;
for (i = 0; i < length; i++) {
buffer[i] = *(str+i+start);
printf("i=%d buffer[i]=%c ptr=%c\n",i,buffer[i],*(str+i+start));
}
//add endline if not present
if (buffer[length] != '\0') {
buffer[length] = '\0';
printf("buffer[%d] is %c\n",length,buffer[length]);
printf("0 added\n");
}
printf("buffer %s %p\n",buffer,buffer);
printf("len(buffer) is %d\n",strlen(buffer));
char *toret;
toret = (char*) &buffer;
printf("toret %s %p\n",toret,toret);
return toret;
} */
Извините, это может быть дубликат, но я не могу найти те же примеры в этом домене. Я ЕСМЬ НОВЫЙ ДЛЯ C!
Не принимайте это плохо, но ваш код настолько завален явными ошибками, что ответить на ваш вопрос совершенно невозможно.Использование 'new' в качестве имени переменной? Возвращает адрес выделенной стеком переменной? Доступ к индексу * n * массива длины с индексом 0 * n *? Запутать 'sizeof' с длиной строки? – spectras
@spectras: при использовании 'new' в качестве имени переменной не рекомендуется в C (я не поощряю его, например, или использование какого-либо другого ключевого слова C++, которое не является ключевым словом C), тем не менее, возникает вопрос: помечен C, а не C++, а компилятор C _must_ принимает 'new' как допустимое имя переменной. Если это не так, это не компилятор C, а, возможно, скрытый компилятор C++. (Это не утверждение, что код хорош - это не так! Это просто наблюдение, что 'new' является допустимым именем для общего использования в коде C.) –
@spectras Спасибо, просмотрев некоторые [strncpy] (http://stackoverflow.com/a/14042078/5645103)s мой код, кажется, работает сейчас –