定义结构变量的字符串值

时间:2011-01-16 11:33:30

标签: c structure

我刚刚接受了某些面试问题。得到了这个与结构相关的问题,我不了解输出的情况,如果有人可以解释原因。

何时在结构中使用字符指针,如

#include <stdio.h>

struct name {
    char *array;
}variable;

int main( int argc, char * argv[] ){

    variable.array="hello";
    printf( "%s\n", variable.array );
}

打印输出hello,但将结构变量更改为

struct name {
    char array[10];
}variable;

编译器在

处抛出错误“赋值中的不兼容类型”
variable.array="hello";

我真的很困惑,我错过了这一点。为什么它会像分配问题一样显示错误?请指正 谢谢

4 个答案:

答案 0 :(得分:7)

您只能在声明时初始化类似的数组, 否则你需要使用

strcpy(variable.array,"hello");

你甚至不能用简单的char数组

char a[10];

a="hello";
编译器将告诉:

incompatible types when assigning to type ‘char[10]’ from type ‘char *’

因为"hello"是一个字符串文字,由指针保存,不能像这样分配给数组。

答案 1 :(得分:3)

在C中,术语"hello"表示“指向其中包含字符”hello\0“的字符串的指针。 因此,当您在第一种情况下分配array="hello"时,您将指向字符串的指针指定为指针变量。哪个是对的。

在第二种情况下,您尝试分配指向错误的数组的指针! 你不能为数组赋值。

答案 2 :(得分:2)

它引发了一个错误,因为char数组和指向char的指针是不同的东西。

数组不是指针。指针不是数组。有时指针可能指向数组。但即使指针指向数组,它也不是数组。

您的编译器在编译时为variable.array提供一个地址。它还为字符串文字“hello”提供了一个地址。他们的地址不一样。字符串文字和数组(或“缓冲区”)位于不同的位置;逻辑上,必须将字符串复制到缓冲区中。

#include <stdio.h>
#include <string.h>

struct name {
    char array[10];
}variable;

int main( void ){

    strcpy(variable.array, "hello");
    printf( "%s\n", variable.array );
    return 0;

}

您可能会发现the C FAQ有用。

答案 3 :(得分:0)

第一件事是数组是指向第一个元素的常量指针 数组,一旦我们声明了,就不能改变它的地址位置。

string strUserName = new System.Security.Principal.SecurityIdentifier(strUser).Translate(typeof(System.Security.Principal.NTAccount)).ToString();