1

下个月我有一个考试,我正在玩弄我不清楚的所有事情。我创建了一个函数,它只允许用户输入字符串并将字符串及其长度作为参数返回。我正在使用 strcpy 将函数内部声明的变量中的字符串复制到第一个参数参数中,但是程序到达该点时会崩溃。

#include <stdio.h>
#include <string.h>
#define MAX 100

void insertString(char orig[], int *len);

int main()
{
    int length = 0;
    char str[MAX] = {0};

    insertString(str[MAX], &length);

    printf("You have inserted: %s", str); 
    printf("The length of the stream you entered is: %d", length);

    return 0;
}

void insertString(char orig[], int *len)
{
    char str1[MAX];
    printf("Insert your string: ");
    fgets(str1, MAX, stdin);
    strcpy(orig, str1);
    *len = strlen(str1) - 1;
}
4

5 回答 5

4
insertString(str[MAX], &length);]

传递一个字符(太超出范围)。

您想将指针传递给数组:

insertString(str, &length);
于 2013-05-29T14:33:58.787 回答
2

将行更改insertString(str[MAX], &length);insertString(str, &length);

前者试图传递一个字符(很惊讶这并没有给你一个警告),后者正在传递指向缓冲区开头的指针,我认为这就是你想要的......

于 2013-05-29T14:34:52.163 回答
1

改变

insertString(str[MAX], &length);

insertString(str, &length);

您想传递字符数组而不仅仅是一个字符。

于 2013-05-29T14:33:54.653 回答
1
char str[MAX] = {0};

insertString(str[MAX], &length);

对于此事,当您char str[MAX] 使用MAXas 100 时。0它创建一个带有下标的数组99

str[MAX]不存在。{至少你不能访问它}

insertString(str, &length);会很好,它传递一个数组

于 2013-05-29T14:36:42.123 回答
0

你应该使用

insertString(str, &length);

或者

insertString(&str[0], &length);
于 2013-05-29T14:42:14.923 回答