将一个字符串设置为等于不带<string.h>的另一个字符串

时间:2019-01-17 02:34:04

标签: c

如何在不使用<string.h>的情况下使C中的两个字符串相等?我想到的最明显的方法是在下面,但是会引发无效的初始化错误。

例如:

    char str1[100] = "This is a string";
    char temp[100] = str1;

3 个答案:

答案 0 :(得分:2)

您不能使用数组来初始化另一个数组。而且您也不能在数组之间使用赋值。

唯一的方法是从一个数组到另一个数组进行显式复制。对于以空字符结尾的字节字符串,我们通常通过strcpy进行操作:

char str1[100] = "This is a string";
char temp[100];

strcpy(temp, str1);

要获得strcpy的正确声明,您应该包含<string.h>。没有办法解决(除非您要编写自己强烈建议反对的strcpy类函数)。

您当然也可以使用memcpy复制整个数组,包括所有未初始化的内容,但是它也在<string.h>中声明。

答案 1 :(得分:2)

您可以执行以下操作。不要初始化temp。只需将指针指向字符,直到在str1中命中空终止符即可。这将比strcpy实施效率低。

    char *p = str1;
    char *q = temp;

    while (*p)
            *q++ = *p++;

    *q = '\0';

答案 2 :(得分:0)

如果您想不使用<string.h>将一个字符串复制到另一个字符串,则必须从str1的第一个位置开始运行循环,直到找到'\0'为止,然后将每个元素复制到{ {1}}。不要忘记在temp的末尾添加一个'\0',否则在打印时会看到一些垃圾值。

temp