Я пытаюсь добавить строку в массив, но я не уверен, почему этот код не работает. Кто-нибудь, пожалуйста, оставит мне отзыв?Как добавить строку в массив строк в c?
/* Exercise b: Add <string> to the end of array <array>.
* Returns: pointer to the array after the string has been added.
*/
char **add_string(char **array, const char *string) {
/*reallocate so the array of strings can hold one more string*/
char** newArray = realloc(array, sizeof (array) + sizeof (char*));
if (!newArray) return array;
/*allocate memory for new string*/
char* newString = malloc(strlen(string) * sizeof (char));
if (!newString) return newArray;
/*copy old string to new string*/
int lastIndex = sizeof (newArray)/sizeof (char*);
strncpy(newString,string,strlen(string));
/*null terminate array and set old end of array to new string*/
newArray[lastIndex] = NULL;
newArray[lastIndex-1] = newString;
return newArray;
}
Когда я запускаю код, ядро свалки, но я не понимаю, почему
Причина, почему я спрашиваю, потому что я знаю, что это было бы легко пройти в размер массива , Но для этого метода я не допущен. Unfortunatley, мой профессор говорит, что параметры fuction должны оставаться неизменными
Вы можете попробовать отладки кода - например, начать распечатку 'SizeOf (массив)' и 'lastIndex' и увидеть, если они принимают значения, которые вы ожидаете. –
'sizeof (newArray)', который не делает то, что вы хотите. 'sizeof' на указателе дает размер указателя, а не размер массива (потому что на самом деле он не является массивом C-указателей и массивов на C, хотя во многих случаях они ведут себя одинаково). – kaylum
Возможный дубликат [Как найти «sizeof» (указатель, указывающий на массив)?] (Http://stackoverflow.com/questions/492384/how-to-find-the-sizeofa-pointer-pointingtoto -an-array) – kaylum