我最近做的字符串函数做得很好,所以我做了第三个字符串函数,基本上类似于strcpy()
:
#include <stdio.h>
#include <string.h>
const char *copy_str(const char *str);
int main() {
char name[256];
printf("What's your name? "); scanf("%255s", name);
char result[256] = copy_str(name);
printf("Hello, %s.\n", result);
}
const char *copy_str(const char *str) {
return str;
}
我没有尝试在我做的函数中使用strcpy()
函数本身,因为我对它不是很熟悉,然后我得到了一个错误:
copy_str.c:9:10: error: array initializer must be an initializer list or string literal
char result[256] = copy_str(name);
^
我是这么安排的:
int main() {
char name[256];
printf("What's your name? "); scanf("%255s", name);
char result[256];
strcpy(name, result);
printf("Hello, %s.\n", result);
}
但结果是这样的:
What's your name? builderman
Hello, .
由于某种原因没有字符串。即使键入了不同的字符串,结果也是一样的。
问:为什么strcpy()
会破坏我的字符串?我可以用什么方法来改进我的函数?
2条答案
按热度按时间xkftehaa1#
我将试着分几部分回答你的问题。
1.复制字符串c:9:10:错误:数组初始值设定项必须是初始值设定项列表或字符串文本
字符结果[256] =复制字符串(名称);
这个错误的意思是在C语法中你不能用你做过的方法初始化一个数组.你只能用一个象这样的文字初始化一个字符数组:
或者是这样的初始化列表:
不能用指向char的指针初始化数组(char是函数的返回值)
所以strcpy遍历字符串并将每个字符从src复制到dest。当发送一个字符数组时,如果数组末尾没有空终止符,可能会出现问题,而在C中字符串应该是这样终止的。
vsdwdz232#
函数
strcpy
具有以下声明即第一个参数定义复制第二个参数所指向的字符串的数组。
但是在你的程序里
您正在将未初始化的字符数组
result
复制到数组name
中。你得写
代替
对于第一个程序,函数
copy_str
是多余的。然而,由于数组隐式转换为指向其第一个元素的指针,初始化器的类型为
char *
。因此,这样的数组初始化是不正确的。您可以使用字符串文本来初始化字符数组,如但不能使用字符指针初始化字符数组,如
您的函数
copy_str
可能如下所示