то, что я хочу сделать, это получить пробелы в разделенных словах в 2-й массив. Я думаю, что это место заменяется на «\ 0», поэтому я могу скопировать строку в array.And затем добавить указатель строки к месту после «\ 0». Упорядочение сделайте это до последнего. Но когда я это сделал, я рассмотрю, как я могу освободить указатель. Возможно, я могу сохранить его первым, поэтому я использую char * t = s. Но когда я освобожу t, я получаю ошибку сегмента. Как я должен освободить указатель s после того, как он переместится в другое место. у меня также есть некоторые вопросы: 1.after I malloc sizeof (char) * 15 memory, я ожидаю printf strlen (s) Я могу распечатать 15, но я получаю 0, почему? Если я хочу знать, размер s сейчас, как мне это сделать? 2.after strcpy str to s, strlen s становится 11.But I malloc размером 15, где будет левая память? эта программа?c language Как я освобождаю указатель после того, как я его переместил
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main(){
char buf[10][5];
char *str = "10 8 6 9 76";
char *s;
char *t = s;
s = (char *)malloc(sizeof(char)*15);
printf("strlen 1 s:%d\n",strlen(s));
memset(s,0x00,sizeof(char)*15);
printf("strlen 2 s:%d\n",strlen(s));
strcpy(s,str);
int n = strlen(s);
int i = 0;
int j = 0;
int k = 0;
for(i = 0; i < n; i++){
if(s[i] == ' '){
s[i] = '\0';
strcpy(buf[k], s);
s += (i+1);
k++;
n = n - i - 1;
i = 0;
}
}
printf("s:%s\n",s);
strcpy(buf[k], s);
for(j = 0; j<= k; j++){
printf("buf[%d]:[%s]\n",j,buf[j]);
}
printf("j:%d\n",j);
free(t);
return 0;
}
В процессе обучения C это всегда хорошая идея, чтобы включить предупреждения '-Wall -Wextra'. Это предотвращает множество ошибок. – Boiethios
Да и, возможно, также '-pedantic' –
@terence hill Привет, не могли бы вы мне помочь из-за смущения: после того, как я указатель malloc s sizeof 15, я strcpy длиной 11 к нему. Что относительно левой памяти не используется? – Hhdzhu