Что касается char *temp6=NULL;
Здесь вы пытаетесь сказать компилятору, «Эй! Настроить temp6 как указатель на символ, но не выделять память для него.»
Если вы делаете что-то например, strcpy(temp,str);
, вы получите segmentation fault
, потому что вы пытаетесь записать в память, которой у вас нет.
В вашем случае вы не пошли так далеко, чтобы увидеть ошибки сегментации, компилятор поймал другую ошибку, которая упоминается в другой, то есть отвечающего в линии:
strcpy(temp6,str[0]);
где компилятор ожидаемый второй аргумент be char *, но вы передали char.
Вы должны сначала выделить память указателю или указать его на массив.
Можно также выделить выделенную память для указателя.
char* temp= malloc(sizeof(char) * 10) ; // allocating memory
temp='\0'; // In essence de-allocating the memory.
Ниже приведен полный пример.
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
main()
{
char* temp= malloc(sizeof(char) * 10) ; //allocating memory enough to store 10 chars
char* str="abcdefgh"; // play safely - always store less than 10 characters. Consider that \0 will be appended to the end.
strcpy(temp,str);
printf("Temp : %s\n",temp);
char* str1="ijklmnop";
strcpy(temp,str);
printf("Temp : %s\n",temp);
temp='\0'; // In essence deallocating the memory.
printf("Temp : %s\n",temp);
strcpy(temp,str);
printf("Temp : %s\n",temp);
}
даст вам следующий результат.
Temp : abcdefgh
Temp : abcdefgh
Temp : (null)
Segmentation fault (core dumped)
Кроме того, убедитесь, что free(temp6)
помещается в конце кода, чтобы очистить вверх память. Хотя это прямо не отвечает на ваш вопрос, надеюсь, что это будет полезно.
Strcpy копирует один символ * в другой символ *. Вы в настоящее время пытаетесь скопировать символ в char * – bpgeck
'str [0]' уже первый символ. Если вам нужен только первый символ, это значение, которое вы хотите. Кроме того, вы пытаетесь скопировать буфер 'NULL' во второй' strcpy'. – kaylum
Итак, используя * str [0], будет работать? Или, может быть, * str? – Chuck