从不兼容的指针类型传递'strcspn'的arg 1

问题描述 投票:1回答:2

所以我正在制作一个具有10个名称的函数。我尝试使用strcspn()从字符串末尾删除\ n。但是我收到此警告。

#define NUM_OF_NAMES 10
#define STR_LEN 50

void input (char arr[][STR_LEN]);


int main()
{
    char str [NUM_OF_NAMES][STR_LEN] = {0};
    input(str);

    return 0;
}
void input (char arr[][STR_LEN])
{
    int i = 0;
    printf("Enter 10 names:\n");

    for (i = 0; i < NUM_OF_NAMES; i++)
    {
        fgets(arr[i], STR_LEN, stdin);
        arr[i][strcspn(arr, "\n")] = 0;
    }
    for (i = 0; i < NUM_OF_NAMES; i++)
    {
        puts(arr[i]);
    }
}

c multidimensional-array newline c-strings
2个回答
2
投票

您输入了字符串

    fgets(arr[i], STR_LEN, stdin);

并且将删除字符串的附加换行符。然后使用字符串!

    arr[i][strcspn(arr[i], "\n")] = 0;

0
投票

您正在将arr传递给strcspn():类型不正确,因为arr是指向STR_LEN个字符的数组的指针。您应该改为传递arr[i]

注意,您还应该测试fgets()的返回值以检测文件的意外结束。

#include <stdio.h>
#include <string.h>

#define NUM_OF_NAMES 10
#define STR_LEN 50

void input(char arr[][STR_LEN]);

int main() {
    char str[NUM_OF_NAMES][STR_LEN] = { 0 };
    input(str);

    return 0;
}

void input(char arr[][STR_LEN]) {
    int i, n;

    printf("Enter 10 names:\n");
    for (i = 0; i < NUM_OF_NAMES; i++) {
        if (!fgets(arr[i], STR_LEN, stdin))
            break;
        arr[i][strcspn(arr[i], "\n")] = '\0';
    }
    n = i;
    for (i = 0; i < n; i++) {
        puts(arr[i]);
    }
    return 0;
}
© www.soinside.com 2019 - 2024. All rights reserved.