You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何这段C语言代码无法正常打印字符串?

问题分析与修复

你的代码存在两个核心问题,导致无法正常输出所有形容词:

1. 循环条件错误

sizeof(adj)计算的是整个指针数组的总字节数,而非数组内的元素个数。比如在64位系统中,每个指针占8字节,4个元素的数组总大小为32,这会让循环执行32次,远超实际元素数量,后续迭代会访问非法内存。

正确的元素个数计算方式是 sizeof(adj)/sizeof(adj[0]),用数组总字节数除以单个元素的字节数,得到准确的元素数量。

2. printf参数错误

adj[i]本身就是指向字符串的指针,直接传给%s格式符就能打印完整字符串。而你写的*adj[i]是取字符串的第一个字符(char类型),把它传给%s会被当成无效内存地址,因此无输出;传给%c则只会打印这个首字符。

修复后的代码

#include<stdio.h>
#include<stdlib.h>

int main(){
  
  const char *adj[] = {"swag","nice","asparagus","ugly"};
  // 计算数组元素个数
  int adj_count = sizeof(adj)/sizeof(adj[0]);

  for (int i=0; i<adj_count; i++)
    printf("you are extremely %s\n", adj[i]);

  return 0;
}

运行结果

执行后会依次输出:

you are extremely swag
you are extremely nice
you are extremely asparagus
you are extremely ugly

内容的提问来源于stack exchange,提问作者casimaister

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 12:54:55