我是C初学者并编写程序将字符串从一个字符数组复制到另一个字符数组:
<input type='submit' id='yes' name='yes' value='Yes'/>
我很好奇的是,上面的代码最终会将原始字符串截断为前面的一个字符:
但下面的代码(声明/初始化数组originalString和newVariable交换的顺序)按预期工作。
#include <stdio.h>
void stringCopy(char s[], char t[]);
int main(void){
char originalString[] = "pineapple"; // original string first
char newVariable[] = ""; // empty string initialised and declared after
stringCopy(newVariable,originalString);
printf("Original string data: %s\n",originalString);
printf("String in new variable: %s",newVariable);
return 0;
}
void stringCopy(char s[], char t[]){
int i=0;
while((s[i] = t[i]) != '\0')
i++;
}
为什么在首先初始化空字符串/字符数组时它会起作用,而不是相反?在初始化/声明之前,函数似乎正在修改原始字符串。新的空字符串。
我所做的就是交换初始化/声明数组的顺序。
(正在使用GCC / G ++编译器,不会对任何一种情况给出任何警告或错误)
答案 0 :(得分:2)
您需要分配空间来填充空字符串。
像这样的空字符串,
char emptyString[] = "";
的大小为1个字节,您无法调整其大小。
这应该被理解为“声明一个数组并使用""
常量”对其进行初始化,从而产生一个大小为1
但仅包含null
的数组}终结者。
您需要通过明确指定大小来分配空间
char emptyString[10] = "";
现在这个数组允许复制到它。