2012-01-25 5 views
-2

Вопрос довольно простой. Как мне преобразовать char[] в char* в C? Мне действительно сложно найти решение для этого. Таким образом, ваша помощь высоко ценится :)Как преобразовать char [] в char * в C?

Вот почему мне это нужно:

sprintf(name,"%c%c%%HACKED%c%c.virus",a,b,c,d); // print a formatted text to string (char[]) 
strcat(buffer,currentPath); // currentPath is of data type char[] 
strcat(buffer,"\\"); 
strcat(buffer,name); // Now this is where the problem comes in. Since strcat function needs a const char* for it's second argument. 

printf("%s",name); 
+1

Не работает ли это? Я имею в виду, последний 'strcat'? Я был бы удивлен. 'name' является реальным символом [], да? Вы не указали его определение. В противном случае 'printf' тоже не сработает. –

+13

Pro Совет. Не указывайте свои вирусы с расширением .virus. – aardvarkk

+1

Вы знаете, что активация мозга не срабатывает. Я просто видел «string const, что бы то ни было», даже не обрабатывал английский смысл содержимого. Возможно, я должен * защищать * использование 'strcat' и некоторого отрывочного указателя math :-) ++ @ aardvarkk – BRFennPocock

ответ

5

Вам не нужно ничего делать. Массив автоматически распадается на указатель, поэтому ваш код выглядит нормально.

Перед тем, как позвонить strcat(), необходимо, чтобы buffer начинал с действительной строки с нулевым символом. Он также должен быть доступен для записи (он не может, например, быть указателем на строковый литерал).

Вам также необходимо убедиться, что вы не переполняете buffer. Я бы порекомендовал вам заглянуть в strncat().

+0

Ну, я прочитал OP, «там проблема, в которой возникает проблема», поскольку «я получаю ошибку компилятора здесь». –

+0

strncat() - плохой совет. Всегда. – wildplasser

+0

Спасибо! Глупый я .. Я просто переполнил буфер, и поэтому он не сработал на моем конце. – Raven

1

Я предполагаю, что код объявлен буферами с чем-то вроде:

 char buffer[100]; 
    char name[100]; 

не часть вашего вопроса, но не использовать strcat в новом коде. Никогда. Отъезд strncat. Это действительно опасно и strncat нет (столько же).

Что касается вашего прямого вопроса: вы можете просто использовать name, как если бы это было char*. Компилятор C автоматически преобразует это в (логический эквивалент) &(name[0]).

+0

'strcat' так же опасен. 'strncpy',' sprintf' и т. д., все потенциальные segfaults. –

1

BTW Почему глупая штука()? почему нет:

sprintf(name,"%c%c%%HACKED%c%c.virus",a,b,c,d); 
sprintf(buffer,"%s\\\\%s", currentPath, name); 

    /* should this be printf("%s", buffer); ?? */ 
printf("%s",name); 

И, как говорит BPRcock: snprintf() еще лучше.

+0

Или просто 'sprintf (buffer,% s \\% c% c %% GEHAKT% c% c.virus", currentPath, a, b, c, d); ' –

+1

Да, конечно, но может быть, что OP были специальные планы с названием. – wildplasser

1

В C значение объекта типа char [N] преобразуется в значение типа char *.

void *p; 
char a[16] = {0} 

p = a; 

в выражении заявление p = a; величина a имеет тип char *.

(С99, 6.3.2.1p3) «За исключением случаев, когда это операнд оператора SIZEOF или одинарным & оператора, или является строка символов используется для инициализации массива, выражение, которое имеет тип» массив type "преобразуется в выражение с типом« указатель на тип », который указывает на начальный элемент объекта массива и не является значением lvalue».

Смежные вопросы