793416 2017-10-30 14:40 采纳率: 100%
浏览 1472
已采纳

以下代码怎样改正(C语言字符串问题)

 #define STDC_WANT_LIB_EXT1 1
#include <stdio.h>
#include <string.h>

int main(void)
{
    char preamble[] = "The joke is:\n\n";
    char str[][40] = {
                        "My dog has\'t got any nose.",
                        "How does your dog smell then?\n",
                        "My dog smells horrible.\n"
    };
    unsigned int strCount = sizeof(str) / sizeof(str[0]);

    unsigned int length = 0;
    for (unsigned int i = 0; i < strCount; ++i)
    {
        length += strnlen_s(str[i], sizeof(str[i]));
    }

    **char joke[length + strnlen_s(preamble, sizeof(preamble)) + 1];**

    if (strncpy_s(joke, sizeof(joke), preamble, sizeof(preamble)))
    {
        printf("Error copying preamble to joke.\n");
        return 1;
    }

    for (unsigned int i = 0; i < strCount; ++i)
    {
        if (strncat_s(joke, sizeof(joke), str[i], sizeof(str[i])))
        {
            printf("Error copying string str[%u].", i);
            return 2;
        }
    }
    printf("%s", joke);
    return 0;


}



错误信息:
1>f:\code\c语言入门经典\字符串和文本的应用\joining_strings.c(21): error C2057: 应输入常量表达式
1>f:\code\c语言入门经典\字符串和文本的应用\joining_strings.c(21): error C2466: 不能分配常量大小为 0 的数组
1>f:\code\c语言入门经典\字符串和文本的应用\joining_strings.c(21): error C2133: “joke”: 未知的大小
1>f:\code\c语言入门经典\字符串和文本的应用\joining_strings.c(23): warning C4034: sizeof 返回 0
1>f:\code\c语言入门经典\字符串和文本的应用\joining_strings.c(31): warning C4034: sizeof 返回 0

  • 写回答

2条回答

  • threenewbee 2017-10-31 00:50
    关注

    char joke[length + strnlen_s(preamble, sizeof(preamble)) + 1];
    这个写法,在一些编译器上可以,另一些不可以。gcc就可以。
    在不允许数组申明中使用变量的编译器,可以用malloc动态分配。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)