назначить строковое значение указателю - PullRequest
6 голосов
/ 18 апреля 2011
char *tempMonth;

char month[4];
month[0]='j';
month[1]='a';
month[2]='n';
month[3]='\0';

как назначить месяц для tempMonth?спасибо

и как его распечатать окончательно?

спасибо

Ответы [ 6 ]

11 голосов
/ 18 апреля 2011

В C month == &month[0] (в большинстве случаев), что соответствует char * или символьному указателю.

Так что вы можете сделать:

tempMonth=month;

Это будет указывать неназначенный указатель tempMonth, чтобы указывать на байты, выделенные в других 5 строках вашего сообщения.

Чтобы сделать строковый литерал, также проще сделать это:

char month[]="jan"; 

В качестве альтернативы (хотя вы не можете изменять символы в этом):

char *month="jan";

Компилятор автоматически выделит длину литерала в правой части month[] с правильной строкой C с нулевым символом в конце, а month будет указывать на литерал.

Для печати:

printf("That string by golly is: %s\n", tempMonth); 

Вы можете просмотреть C-строки и C-строковые литералы .

2 голосов
/ 18 апреля 2011

Если вы просто хотите получить копию указателя , вы можете использовать:

tempmonth = month;

но это означает, что оба указывают на одни и те же базовые данные - измените одно, и это повлияет на оба.

Если вам нужны независимые строки, вполне вероятно, что ваша система будет иметь strdup, в этом случае вы можете использовать:

tempmonth = strdup (month);
// Check that tempmonth != NULL.

Если ваша реализация не имеет strdup, получает один :

char *strdup (const char *s) {
    char *d = malloc (strlen (s) + 1);   // Allocate memory
    if (d != NULL) strcpy (d,s);         // Copy string if okay
    return d;                            // Return new memory
}

Для печати строк в отформатированном виде посмотрите на семейство printf, хотя для простой строки, подобной этой, идущей на стандартный вывод, puts может быть достаточно хорошим (и, вероятно, более эффективным).

2 голосов
/ 18 апреля 2011
tempMonth = month

Когда вы присваиваете значение указателю - это указатель, а не строка.При назначении, как указано выше, вы не будете чудесным образом иметь две копии одной и той же строки, у вас будет два указателя (month и tempMonth), указывающие на одну и ту же строку .

Если вам нужна копия - вам нужно выделить память (используя malloc), а затем скопировать значения (используя strcpy, если это строка с нулевым символом в конце, memcpy или циклв противном случае).

1 голос
/ 18 апреля 2011
#include "string.h" // or #include <cstring> if you're using C++

char *tempMonth;
tempMonth = malloc(strlen(month) + 1);
strcpy(tempMonth, month);
printf("%s", tempMonth);
1 голос
/ 18 апреля 2011
tempmonth = malloc (strlen (month) + 1); // allocate space
strcpy (tempMonth, month);               //copy array of chars

Не забудьте:

include <string.h>
0 голосов
/ 18 апреля 2011

Вы можете сделать что-то вроде:

char *months[] = {"Jan", "Feb", "Mar", "Apr","May", "Jun", "Jul", "Aug","Sep","Oct", "Nov", "Dec"};

и получите доступ

printf("%s\n", months[0]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...