C语言使用for循环打印字符串前N个字符无输出问题求助
代码错误排查及修复方案
你的代码存在3处核心问题,逐一说明如下:
- printf格式符使用错误
你当前用%s格式符输出inp[i],但inp[i]是单个char类型的字符,%s要求传入的是char*类型的字符串首地址,此处传单个字符会把字符的ASCII值当作内存地址访问,直接触发段错误,导致程序异常退出无输出。如果要打印单个字符,应该使用%c格式符。 - 循环终止条件错误
你需要打印前len个字符,数组下标从0开始的情况下,合法下标是0到len-1,所以循环条件应该是i < len而非i <= len,后者会多打印1个超出预期的字符。 - scanf参数写法不规范
inp本身就是字符数组的首地址,传入scanf时不需要加取地址符&,虽然部分场景下不会直接报错,但属于错误写法,容易引发其他问题。
修正后完整代码
#include <stdio.h> #include <stdlib.h> #include <stdbool.h> void printFrstChars (char inp[], int len) { for(int i = 0; inp[i] != '\0' && i < len; i++){ printf("%c", inp[i]); } // 增加换行避免输出和终端提示符粘连 printf("\n"); } int main () { int len = 0; char inp[100]; printf("Input string and length:\n"); scanf("%99s %d", inp, &len); printFrstChars(inp, len); return 0; }
修改后调用printFrstChars("Example",3)即可得到预期输出Exa。
内容的提问来源于stack exchange,提问作者josef_uncovsky
相关产品推荐
相关产品推荐

