所以我正在制作一个具有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]);
}
}
您输入了字符串
fgets(arr[i], STR_LEN, stdin);
并且将删除字符串的附加换行符。然后使用字符串!
arr[i][strcspn(arr[i], "\n")] = 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;
}