我刚刚接受了某些面试问题。得到了这个与结构相关的问题,我不了解输出的情况,如果有人可以解释原因。
何时在结构中使用字符指针,如
#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";
我真的很困惑,我错过了这一点。为什么它会像分配问题一样显示错误?请指正 谢谢
答案 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();