C - 实现 strcpy() 但出现段错误
C -Implementing strcpy() But Segfault
我做了一个strcpy()
函数
在 C 中,我将单词从一个数组复制到另一个数组,而不仅仅是字母,但是当我 运行 它时,我遇到了分段错误怎么办?
#include <stdio.h>
void strcpy1(char *dest[], char source[])
{
while ((*dest++ = *source++));
}
int main()
{
char source[3][20] = { "I", "made", "this" };
char dest[3][20];
strcpy1(&dest, source);
//printing destination array contents
for (int i = 0; i < 3; i++) {
printf("%s\n", dest[i][20]);
}
return 0;
}
您的代码中存在多个问题:
您的自定义 strcpy1
函数的原型应该是:
void strcpy1(char *dest[], char *source[]);
数组 source
和 dest
是二维 char
数组:与 strcpy1
期望的类型非常不同,后者是指针数组.将定义更改为:
char *source[4] = { "I", "made", "this" };
char *dest[4];
您应该将目标数组作为 dest
而不是 &dest
源数组应该有一个NULL
指针终止符:它应该被定义为至少4的长度。目标数组也是如此。
在打印循环中 dest[i][20]
指的是超出第 i
个字符串末尾的字符。您应该将字符串作为 dest[i]
.
传递
这是修改后的版本:
#include <stdio.h>
void strcpy1(char *dest[], char *source[])
{
while ((*dest++ = *source++));
}
int main()
{
char *source[4] = { "I", "made", "this" };
char *dest[4];
strcpy1(dest, source);
//printing destination array contents
for (int i = 0; dest[i]; i++) {
printf("%s\n", dest[i]);
}
return 0;
}
请注意,命名一个与标准函数 strcpy()
语义截然不同的函数 strcpy1
有点令人困惑。
%s
说明符用于字符串,例如,char*
指的是字符串的第一个字符。
当您将 dest[i][20]
传递给 printf
函数时,它不是 char*
。它是单个char
、21stchar
(有效索引为0
-19
,共20个元素) .
所以它是一个数组越界索引,而且,不是 printf
期望的 char*
。
printf("%s\n", dest[i][20]);
我做了一个strcpy()
函数
在 C 中,我将单词从一个数组复制到另一个数组,而不仅仅是字母,但是当我 运行 它时,我遇到了分段错误怎么办?
#include <stdio.h>
void strcpy1(char *dest[], char source[])
{
while ((*dest++ = *source++));
}
int main()
{
char source[3][20] = { "I", "made", "this" };
char dest[3][20];
strcpy1(&dest, source);
//printing destination array contents
for (int i = 0; i < 3; i++) {
printf("%s\n", dest[i][20]);
}
return 0;
}
您的代码中存在多个问题:
您的自定义
strcpy1
函数的原型应该是:void strcpy1(char *dest[], char *source[]);
数组
source
和dest
是二维char
数组:与strcpy1
期望的类型非常不同,后者是指针数组.将定义更改为:char *source[4] = { "I", "made", "this" }; char *dest[4];
您应该将目标数组作为
dest
而不是&dest
源数组应该有一个
NULL
指针终止符:它应该被定义为至少4的长度。目标数组也是如此。在打印循环中
传递dest[i][20]
指的是超出第i
个字符串末尾的字符。您应该将字符串作为dest[i]
.
这是修改后的版本:
#include <stdio.h>
void strcpy1(char *dest[], char *source[])
{
while ((*dest++ = *source++));
}
int main()
{
char *source[4] = { "I", "made", "this" };
char *dest[4];
strcpy1(dest, source);
//printing destination array contents
for (int i = 0; dest[i]; i++) {
printf("%s\n", dest[i]);
}
return 0;
}
请注意,命名一个与标准函数 strcpy()
语义截然不同的函数 strcpy1
有点令人困惑。
%s
说明符用于字符串,例如,char*
指的是字符串的第一个字符。
当您将 dest[i][20]
传递给 printf
函数时,它不是 char*
。它是单个char
、21stchar
(有效索引为0
-19
,共20个元素) .
所以它是一个数组越界索引,而且,不是 printf
期望的 char*
。
printf("%s\n", dest[i][20]);