2015-11-28 3 views
0

Я пытаюсь получить первый символ моего полукокса таНоса так:Как получить первый символ строки в C

char * str = malloc(sizeof(char)*100); 
      strcpy(str, op_mmin); 
      char *temp6=NULL; 
      strcpy(temp6,str[0]); 

Однако, я получаю следующее предупреждение:

warning: passing argument 2 of ‘strcpy’ makes pointer from integer without a cast [enabled by default] 
    strcpy(temp6,str[0]); 
^

Почему я не могу сделать str [0], чтобы получить первый символ? Я также пытался сделать это, используя обычные массивы (например, не malloc), и я получаю ту же ошибку. Как получить первый символ этого malloc (или массив, если вы тоже знаете это)?

+0

Strcpy копирует один символ * в другой символ *. Вы в настоящее время пытаетесь скопировать символ в char * – bpgeck

+1

'str [0]' уже первый символ. Если вам нужен только первый символ, это значение, которое вы хотите. Кроме того, вы пытаетесь скопировать буфер 'NULL' во второй' strcpy'. – kaylum

+0

Итак, используя * str [0], будет работать? Или, может быть, * str? – Chuck

ответ

1

Потому что str [0] является символом, а не строкой. И функция strcpy должна использовать в качестве аргумента два аргумента string (char *).

Для решения проблемы вы можете установить temp [0] = str [0]; или использовать функцию sprintf, или использовать функцию strncpy

Но вы должны выделить массив темп прежде, чем вы захотите его использовать.

+1

temp6 is NULL, кстати ... –

+0

Да, но я сказал, что он должен выделить временный массив перед использованием – Viet

+0

@ ringø, это не то, что сообщение об ошибке для – bpgeck

1

Что касается 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) помещается в конце кода, чтобы очистить вверх память. Хотя это прямо не отвечает на ваш вопрос, надеюсь, что это будет полезно.

0

Я решил эту проблему следующим образом:

char temp6 = op_mmin[0]; 

Вот именно! Теперь temp6 имеет первый символ в op_mmin. Спасибо за вашу помощь.