为字符赋值

时间:2011-04-18 03:53:09

标签: c

char *tempMonth;

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

如何将月份分配给tempMonth?感谢

以及如何将其打印出来?

感谢

6 个答案:

答案 0 :(得分:11)

在C中,month == &month[0](在大多数情况下),这些等于char *或字符指针。

所以你可以这样做:

tempMonth=month;

这将指示未分配的指针tempMonth指向在帖子的其他5行中分配的文字字节。

要创建字符串文字,执行此操作也更简单:

char month[]="jan"; 

或者(虽然你不允许修改这个中的字符):

char *month="jan";

编译器将使用正确的以NULL结尾的C字符串自动分配month[]右侧的文字长度,month将指向文字。

要打印它:

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

您可以查看C strings and C string literals

答案 1 :(得分:2)

tempMonth = month

为指针赋值时 - 它是指针,而不是字符串。通过如上所述进行分配,您不会奇迹般地拥有相同字符串的两个副本,您将有两个指针(monthtempMonth)指向相同字符串。

如果您想要的是副本 - 您需要分配内存(使用malloc),然后实际复制值(如果它是以空字符结尾的字符串strcpy,则使用memcpy 1}}或其他循环。

答案 2 :(得分:2)

如果您只想要指针的副本,可以使用:

tempmonth = month;

但这意味着两者都指向相同的基础数据 - 更改一个并且它会影响两者。

如果你想要独立的字符串,你的系统很可能会有strdup,在这种情况下你可以使用:

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

如果您的实施没有 strdupget one

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可能足够好(并且可能更有效)。

答案 3 :(得分:1)

tempmonth = malloc (strlen (month) + 1); // allocate space
strcpy (tempMonth, month);               //copy array of chars

请记住:

include <string.h>

答案 4 :(得分:1)

#include "string.h" // or #include <cstring> if you're using C++

char *tempMonth;
tempMonth = malloc(strlen(month) + 1);
strcpy(tempMonth, month);
printf("%s", tempMonth);

答案 5 :(得分:0)

您可以执行以下操作:

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

并获取访问权限

printf("%s\n", months[0]);