标题:照着打的出了错,会了语法不会编,很尴尬的状态,讲的会又啥也不会
只看楼主
梨花压海棠
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2020-2-13
结帖率:100%
已结贴  问题点数:20 回复次数:12 
照着打的出了错,会了语法不会编,很尴尬的状态,讲的会又啥也不会
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void inverse();
void inverse01(buf, mybuf);
void main()
{
    char buf[] = "abcde";
    char mybuf[1024] = { 0 };
    inverse(buf);
    inverse01(buf, mybuf);
}
void inverse(char *p)
{
    if (p == NULL)
        return;
    if (*p == '\0')
        return;
    inverse(p+1);
    printf("%c", *p);
}
void inverse01(char* p,char* result)
{
    if (p == NULL||result==NULL)
        return;
    if (*p == '\0')
        return;
    inverse(p + 1,result);
    strncat_s(result, p, 1);
}  
严重性    代码    说明    项目    文件    行   
错误    C2198    “strncat_s”: 用于调用的参数太少            
警告    C4020    “inverse”: 实参太多    API            
警告    C4024    “strncat_s”: 形参和实参 2 的类型不同    API        
警告    C4024    “strncat_s”: 形参和实参 3 的类型不同    API            
警告    C4047    “函数”:“rsize_t”与“char *”的间接级别不同    API    E   
警告    C4047    “函数”:“const char *”与“int”的间接级别不同            
错误(活动)    E0165    函数调用中的参数太少   
下面程序strncpy_s(new, str + i,count);语句出现错误与上面类似   
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int tranSpace(char* str, char* new)
{
    char* p = str;
    int i, j, count = 0;
    if (str == NULL || new == NULL)
    {
        printf("func tranSpace()\n");
        return -1;
    }
    i = 0;
    while (isspace(p[i]) && p[i] != '\0')
        i++;
    j = strlen(p) - 1;
    while (isspace(p[j]) && p[j] != '\0')
        j--;
    count = j - i + 1;
    strncpy_s(new, str + i,count);
    new[count] = '\0';
    return 0;
}
int main()
{   
    char buf[1024] = {0};
    char* str = "          abcde              ";
    tranSpace(str,buf);
    printf("%s", buf);

}
搜索更多相关主题的帖子: return NULL str char include 
2020-02-13 17:10
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
得分:5 
要不你把你照着打的那个东西发过来,我帮你对照对照?

把学习时间浪费在混坛上是傻瓜行为,更何况自己的水平连一两都没到。
2020-02-13 17:32
纯蓝之刃
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:76
帖 子:554
专家分:3690
注 册:2019-7-29
得分:5 
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void inverse(char *p);                  //没有设置形参
void inverse01(char *buf,char *mybuf);
void main()
{
    char buf[] = "abcde";
    char mybuf[1024] = {0};
    inverse(buf);
    inverse01(buf, mybuf);
}
void inverse(char *p)
{
    if (p == NULL)
        return;
    if (*p == '\0')
        return;
    inverse(p+1);
    printf("%c",*p);
}
void inverse01(char* p,char* result)
{
    if (p == NULL||result==NULL)
        return;
    if (*p == '\0')
        return;
    inverse01(p + 1,result);
    //strncat_s(result, p, 1);      //这个函数在哪?
}

一沙一世界,一花一天堂。无限掌中置,刹那成永恒。
2020-02-13 19:25
梨花压海棠
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2020-2-13
得分:0 
回复 2楼 叶纤
[
  老哥,我是看的B站视频,截图给您,不知道您能不能收到,
2020-02-14 10:29
梨花压海棠
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2020-2-13
得分:0 
回复 2楼 叶纤
[
  老哥,我是看的B站视频,截图给您,不知道您能不能收到,
2020-02-14 10:29
梨花压海棠
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2020-2-13
得分:0 
回复 3楼 纯蓝之刃
那个strncat_s(result, p, 1);就是在void inverse01(char* p,char* result)函数里啊,我希望它是往result里拷贝p指的值,每次拷贝1个,我觉得这个函数本质是利用那个栈的先进后出,利用函数递归,一层一层的返回,我用的vs2019,它提示我strncat加_s才安全,errno_t strncat_s(char * restrict dest,rsize_t destsz,const char * restrict src,rsize_t count);这是那个函数的使用方法,我觉得我是没搞懂这个函数的方法
2020-02-14 10:37
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
得分:0 
程序代码:
   #include <stdio.h>
#include <stdlib.h>
#include <string.h>
void inverse(char*p);//前置声明语法错误
void inverse01(char *buf,char *mybuf);//错误
void main()
{
    char buf[] = "abcde";
    char mybuf[1024] = { 0 };
    inverse(buf);
    inverse01(buf, mybuf);
}
void inverse(char *p)
{
    if (p == NULL)
        return;
    if (*p == '\0')
        return;
    inverse(p+1);
    printf("%c", *p);
}
void inverse01(char* p,char* result)
{
    if (p == NULL||result==NULL)
        return;
    if (*p == '\0')
        return;
    inverse01(p + 1,result);
    strncat(result, p, 1);//看图没有_s
}     



[此贴子已经被作者于2020-2-14 11:00编辑过]


把学习时间浪费在混坛上是傻瓜行为,更何况自己的水平连一两都没到。
2020-02-14 10:55
梨花压海棠
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2020-2-13
得分:0 
回复 7楼 叶纤
第一个形参是忘了,第二个是我改了参数名,因为我是看了视频然后自己打了一遍,然后再对照视频改,所以参数名改了,所以替换了,应该没问题。    最后那个_s是因为我用的vs2019,它要求我加_s,不然它就提示不安全。
2020-02-14 11:06
梨花压海棠
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2020-2-13
得分:0 
回复 7楼 叶纤

错误    C4996    'strncat': This function or variable may be unsafe. Consider using strncat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.    API    E:\Project\C\shujujiegou\API\API\pr_倒转str.c    31   
这是没加_s的错误
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void inverse(char *p);
void inverse01(char *p, char *result);
void main()
{
    char buf[] = "abcde";
    char mybuf[1024] = { 0 };
    inverse(buf);
    inverse01(buf, mybuf);
}
void inverse(char *p)
{
    if (p == NULL)
        return;
    if (*p == '\0')
        return;
    inverse(p+1);
    printf("%c", *p);
}
void inverse01(char* p,char* result)
{
    if (p == NULL||result==NULL)
        return;
    if (*p == '\0')
        return;
    inverse(p + 1,result);

    strncat_s(result, p, 1);
}  
这是我改了形参的代码,还是提示一样的问题,应该是我strncat这个函数没搞明白,但是用法我也看不懂,视频上也就是这样写的,
errno_t strncat_s(char * restrict dest,rsize_t destsz,const char * restrict src,rsize_t count);
2020-02-14 11:15
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
得分:0 
回复 9楼 梨花压海棠
你把代码改正确了再说,或者你把我的代码复制粘贴一下!!!

把学习时间浪费在混坛上是傻瓜行为,更何况自己的水平连一两都没到。
2020-02-14 11:27



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-499216-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.423329 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved