打印字符串(C)的前N个字符



我的目标是打印出前N个字符(len)变量)使用一个简单的for循环。然而,代码似乎不起作用。例如,对于输入printFrstChars("Example",3),代码应该打印出Exa,但它不打印出任何.

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
void printFrstChars (char inp[], int len)
{
for(int i = 0; inp[i] != '' && i <= len; i++){
printf("%s", inp[i]);
}
}
int main ()
{   
int len = 0;
char inp[100];
printf("Input string and length:n");
scanf("%99s %d", &inp, &len);
printFrstChars(inp, len);

return 0;
}

我检查了代码多次,我(显然)没有找到导致这种情况的错误。我想,这要么是一个足够微妙的错误,足以让我的初学者的眼睛隐藏起来,要么整个方法都是错误的。

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
void printFrstChars (char inp[], int len)
{
for(int i = 0; inp[i] != '' && i < len; i++){
printf("%c", inp[i]);
}
printf("n");
}
int main ()
{   
int len = 0;
char inp[100];
printf("Input string:n");
scanf("%99s", inp);
printf("Input length (99 or less):n");
scanf("%d", &len);
printFrstChars(inp, len);

return 0;
}

分隔输入,扫描到inp而不是&inp,以%c格式打印每个字符,并在i < len时迭代(在后面打印新行)。我的2美分。


编辑

感谢@AndrewHenle指出溢出。%99s格式说明符只读取最多99个字符(提示符也说明了这一点)。

我认为您需要从%99s中删除99,您将字符串作为输入。只有%s将在这种情况下工作,您没有输入带有'空格'的字符串。另外,如果要打印N个字符,则需要输入len<Nlen<=N-1。只是,用inp代替&inp