为指针分配一个字符串值

问题描述

|
char *tempMonth;

char month[4];
month[0]=\'j\';
month[1]=\'a\';
month[2]=\'n\';
month[3]=\'\\0\';
如何为tempMonth分配月份?谢谢 以及如何最终将其打印出来? 谢谢     

解决方法

在C语言中,ѭ1)(在大多数情况下)等于these2ѭ或字符指针。 因此,您可以执行以下操作:
tempMonth=month;
这将使未分配的指针“ 4”指向您的帖子的其他5行中分配的文字字节。 要生成字符串文字,这样做也更简单:
char month[]=\"jan\"; 
另一种方法(尽管您不允许修改此字符):
char *month=\"jan\";
编译器将自动在
month[]
的右侧分配文字的长度,并以适当的NULL终止的C字符串分配,而
month
将指向文字。 要打印它:
printf(\"That string by golly is: %s\\n\",tempMonth); 
您可能希望查看C字符串和C字符串文字。     ,
tempMonth = month
当您将值赋给指针时-它是指针,而不是字符串。通过如上所述的分配,您将不会奇迹般地拥有同一字符串的两个副本,而是拥有两个指向同一字符串的指针(
month
tempMonth
)。 如果要复制,则需要分配内存(使用
malloc
),然后实际复制值(如果是空终止字符串,则使用
strcpy
,否则使用
memcpy
或循环)。     ,如果只需要指针的副本,则可以使用:
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
可能就足够了(并且可能更有效)。     ,
#include \"string.h\" // or #include <cstring> if you\'re using C++

char *tempMonth;
tempMonth = malloc(strlen(month) + 1);
strcpy(tempMonth,month);
printf(\"%s\",tempMonth);
    ,
tempmonth = malloc (strlen (month) + 1); // allocate space
strcpy (tempMonth,month);               //copy array of chars
记得:
include <string.h>
    ,您可以执行以下操作:
char *months[] = {\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"};
并获得访问
printf(\"%s\\n\",months[0]);