我是一名 C 初学者,正在编写一个程序将字符串从一个字符数组复制到另一个字符数组:
#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++;
}
我好奇的是,上面的代码最终将原始字符串的前面截断了一个字符:
但是下面的代码(声明/初始化数组 OriginalString 和 newVariable 的顺序交换了)按预期工作。
#include <stdio.h>
void stringCopy(char s[], char t[]);
int main(void){
char newVariable[] = ""; // empty string initialised and declared first
char originalString[] = "pineapple"; // original string data 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++ 编译器,对于任何一种情况都不会给出任何警告或错误)
最佳答案
您需要分配空间来填充空字符串。
像这样的空字符串,
char emptyString[] = "";
大小为 1 字节,并且无法调整其大小。
这应该被理解为“声明一个数组并使用”“
常量初始化它”,得到一个大小为1
的数组仅包含 null
终止符。
您需要通过显式指定大小来分配空间
char emptyString[10] = "";
现在这个数组允许复制到其中。
关于c - 在 C 中将数据复制到空字符串时出现意外截断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47139737/