1

我试图写出 C 中可用的字符串函数的一些实现。我的代码是:

#include <stdio.h>
#include <stdlib.h>   

char *mystrcpy(char *s1, char *s2)
{
    while(*s1++ = *s2++);
    return s1;
}

int mystrlen(char *s)
{
    int len = 0;
    while(*s != '\0')
    {
        len++;
    }
    return len;
}

int main(void)
{
    char arr = "Hi";
    char arr1[10];
    char arr2[] = "Hello";
    int length;

    mystrcpy(arr1, arr2);
    printf("%s", arr1);

    length = mystrlen(arr);
    printf("%d", length);

    return 0;
}

mystrcpy工作正常,但其他方法mystrlen不执行。可能是什么错误?以下是程序终止说明:

进程以 -1073741510 状态终止(0 分 4 秒)

此外,很少有与演员表相关的警告。代码中是否有我应该使用任何演员表的地方?

4

2 回答 2

3

首先,你mystrlen有一个无限循环。

固定代码:

int mystrlen(const char *s)
{
    int len = 0;
    while (*s++ /* increment to next character every loop */ != '\0')
    {
        len++;
    }
    return len;
}

还添加了const,因为您从不更改引用的数据*s

二、赋值:char arr="Hi";无效。

您正在尝试将char[]数组分配给char变量。正确的形式是以下之一

char arr[]="Hi"; // array syntax
char *arr="Hi";  // pointer syntax

鉴于您的arr分配无效,您的运行时错误很可能是由于mystrlen尝试不正确的 deference引起的arr

你用的是什么编译器?大多数符合标准的编译器应该已经发现了第二个问题。如果使用 GCC,请将-Wall标志添加到您的 makefile。

于 2012-06-19T14:54:52.903 回答
1

这:

char arr="Hi"; /* Should have caused compiler warning,
                  as is attempting to assign a char
                  to a char[3]. */

应该:

char arr[] ="Hi";

或者:

char* arr = "Hi";
于 2012-06-19T14:55:03.527 回答