Tag: char

为什么char *会导致未定义的行为而char 不会?

尝试修改字符串文字会导致未定义的行为: char * p = “wikipedia”; p[0] = ‘W’; // undefined behaviour 防止这种情况的一种方法是将其定义为数组而不是指针: char p[] = “wikipedia”; p[0] = ‘W’; // ok 为什么char*会导致未定义的行为,而char[]却没有?

字符数组的大小和字符指针的大小

我有一段C代码,我不明白sizeof(…)函数是如何工作的: #include int main(){ const char firstname[] = “bobby”; const char* lastname = “eraserhead”; printf(“%lu\n”, sizeof(firstname) + sizeof(lastname)); return 0; } 在上面的代码中,sizeof(firstname)是6,sizeof(lastname)是8。 但是bobby是5个字符宽, eraserhead是11个宽。 我期待16 。 为什么sizeof对字符数组和字符指针的行为有所不同? 任何人都可以澄清吗?

初始化固定大小的char数组时没有编译器错误,没有足够的空间用于null终止符

假设我有以下c char数组: char okaysize4[5] = “four”; // line 5 char toosmall4[4] = “four”; // line 6 char toosmall3[3] = “four”; // line 7 当我用gcc 4.4.7编译时,我收到以下错误: array.c:7:警告:chars数组的初始化字符串太长 第7行预计会出现此错误,因为我试图将5个字符(“four” + \0)填充到3个元素数组中。 第5行也不会出现错误,因为5元素数组足够大。 但是我很惊讶第6行没有类似的错误。最终在toosmall4初始化的是一个未toosmall4的字符串,这可能会导致各种麻烦。 我的理解是,由于null终止符,c字符串文字”four”应该是五个字符长。 实际上sizeof(“four”)是5.那么为什么编译器不会在这里给出错误? 有什么方法可以改变我的声明/定义/初始化,以便在这种情况下标记错误?

从函数返回char / string

我在C中编码相当新,目前我正在尝试创建一个返回ac string / char数组并分配给变量的函数。 到目前为止,我已经观察到返回char *是最常见的解决方案。 所以我试过: char* createStr() { char char1= ‘m’; char char2= ‘y’; char str[3]; str[0] = char1; str[1] = char2; str[2] = ‘\0’; char* cp = str; return cp; } 我的问题是如何使用这个返回的char*并将它指向的char数组赋值给char []变量? 我尝试过(都导致了noob-drowning错误): char* charP = createStr(); char myStr[3] = &createStr(); char* charP = *createStr();