如何解决为指针分配一个字符串值
|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]);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。