c语言sprintf函数问题 100

在codewars上面是通过了的,我把它复制到vc就出错了;还有这一行k+=sprintf(str+k,"%d",*text&31);是怎么执行的啊?... 在codewars上面是通过了的,我把它复制到vc就出错了;还有这一行 k += sprintf(str + k, "%d ", *text&31); 是怎么执行的啊? 展开
 我来答
暗送秋浡365
2019-03-16 · TA获得超过4660个赞
知道大有可为答主
回答量:6401
采纳率:78%
帮助的人:309万
展开全部
%3d :就是输出时右对齐,如果数字长度小于3,则左边用空格填充
%6d :就是输出时右对齐,如果数字长度小于6,则左边用空格填充
int a=20984,b=48090;
sprintf(str,"%3d%6d",a,b);
由于a的长度为5,所以不用空格了,而b的长度为5,但设定的对齐长度为6,所以左为用空格填充一位
故输出:20984 48090
追问
大哥,你看我详细描述里面的内容好吧,那个K是怎么回事?
冯小气气
2019-03-18 · 知道合伙人IT服务行家
冯小气气
知道合伙人IT服务行家
采纳数:98 获赞数:239
八年编程经验,公司核心技术人员。

向TA提问 私信TA
展开全部
我觉得可能是因为编译器默认没有支持或者勾选C99吧。

C99支持变量在使用时声明,而非C99则要求变量定义必须放在函数开始处一起定义。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2019-03-17
展开全部

你试试我给的测试代码:

#include <stdio.h>       
#include <stdlib.h>      
#include <string.h>      
    
char *alphabet_position(char *text) {         
   char *str = malloc(strlen(text) * 3);      
   str[0] = 0; 
   int k = 0;  
   while (*text) {       
       if (*text > 64) { 
 k += sprintf(str + k, "%d ", *text&31);       
 text ++;      
       }       
   }
   str[k - 1] = 0;       
   return str; 
}   
    
int main() {   
    char str[] = "abc";  
    char *test;
    test = alphabet_position(str);  
    printf("%s===%s\n", str, test);    
    
    return 0;  
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
shine1991
科技发烧友

2019-03-17 · 智能家居/数码/手机/智能家电产品都懂点
知道顶级答主
回答量:4.7万
采纳率:82%
帮助的人:2.3亿
展开全部
将k的定义提至str[0]=0;前
追问
能详细点吗?比如说*text=“abc”的时候,
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fastfs
2019-03-18 · TA获得超过1423个赞
知道大有可为答主
回答量:2659
采纳率:62%
帮助的人:802万
展开全部
定义变量放在调用函数前试试 malloc放在下面
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式