标签: printf

%*s格式说明符C.

printf("%d",printf("%*s%*s",6,"",6))

结果添加了2个数字(6 + 6),是否有人使用这种类型的格式说明符

c printf scanf

4
推荐指数
1
解决办法
6531
查看次数

printf/fprintf根据c99的最大尺寸

C99 标准说:

任何单次转换可以产生的字符数应至少为4095

这是否意味着最大尺寸是4095,如果是,为什么它说"至少"?

c printf c99

4
推荐指数
1
解决办法
2291
查看次数

使用printf以十六进制格式打印字符串,结果失真

我想以十六进制格式打印字符串,

在机器A上,类似于

ori_mesg = gen_rdm_bytestream (1400,seed)
sendto(machine B, ori_mesg, len(mesg))
Run Code Online (Sandbox Code Playgroud)

在机器B上

 recvfrom(machine A, mesg)

mesg_check = gen_rdm_bytestream (1400, seed)

            for(i=0;i<20;i++){
                    printf("%02x ", *(mesg+i)& 0xFF);
            }
            printf("\n");
            for(i=0;i<20;i++){
                    printf("%02x ", *(mesg_check+i));
            }
            printf("\n");
Run Code Online (Sandbox Code Playgroud)

seed 在1,2,3之间变化....

字节生成函数是:

u_char *gen_rdm_bytestream (size_t num_bytes, unsigned int seed)
{
    u_char *stream = malloc (num_bytes+4);
    size_t i;

    u_int16_t seq = seed;
    seq = htons(seq);
    u_int16_t tail = num_bytes;
    tail = htons(tail);
    memcpy(stream, &seq, sizeof(seq));
    srand(seed);
    for (i = 3; i < num_bytes+2; i++){
            stream[i] = rand (); …
Run Code Online (Sandbox Code Playgroud)

c printf

4
推荐指数
1
解决办法
7万
查看次数

Printf在行尾插入%

我正在编写一个基本程序,以学习如何在C语言中使用基本输入/输出,并且效果很好。我唯一的问题是打印时,终端上字符串的末尾有一个“%”。这是我的代码:

#include <stdio.h>

int main(int argc, char **argv) {

    char name[32];

    printf("Enter your name: ");
    scanf("%s", name);

    printf("Hello, %s", name);

    return 0;

}
Run Code Online (Sandbox Code Playgroud)

当我运行程序时,输出为 Hello, Andrew%

有什么帮助吗?

c printf

4
推荐指数
1
解决办法
2120
查看次数

C++:sprintf考虑哪种语言环境?

我使用两个函数sprintf和snprintf来处理"double"到string的转换.在其中一个案例中,正在运行的应用程序具有与Windows的语言环境不同的语言环境.因此,在这种情况下,sprintf考虑的语言环境始终是应用程序.然而,snprintf有时会开始使用Windows语言环境.因此,两种方法返回的十进制字符都不同,从而导致问题.

为了提供更多细节,我在我的项目中有一个库,它从"double"构建一个字符串,这个库使用snprintf将double转换为字符串.然后我需要将此信息发送到服务器,该服务器将理解"." (点)仅作为小数符号.因此,我需要用"."替换本地十进制字符.(点).要找出本地十进制字符(为了替换它),我使用的是我的项目中提供的一个使用sprintf的库.然后我用一个点替换这个字符以获得最终输出.

另外,请注意,sprintf始终在考虑本机应用程序的区域设置,而snprintf有时会考虑Windows的区域设置.由于问题不一致,抱歉没有提供明确的例子.

那么,snprintf可能在哪些情况下表现不同?为什么我会从这两种方法中获得这种不同的行为?我怎么能避免呢?

PS - 我必须使用这两种方法,所以请建议一个不需要我使用任何不同方法的解决方案.

谢谢.

c++ printf localization

4
推荐指数
1
解决办法
1850
查看次数

如何在C中打印尾随空格

我想打印一些这样的数据:

John       22
Shakib     25
Ponting    28
Run Code Online (Sandbox Code Playgroud)

在这里,我需要在名称后打印一些尾随空格.

我这样做了:

char *name[]={"John", "Shakib", "Ponting"};
int age[]={22, 25, 28};
int n=3;
for(int i=0; i<n; i++)
{
    printf("%s",name[i]);
    int cnt=10;  // I need trailing spaces upto 10th column
    int len=strlen(name[i]);
    cnt-=len;
    while(cnt)
    {
        printf(" ");
        cnt--;
    }
    printf("%d\n",age[i]);
}
Run Code Online (Sandbox Code Playgroud)

有没有其他方法可以在不使用循环的情况下打印尾随空格?

c printf

4
推荐指数
1
解决办法
1732
查看次数

C - 跳过用户输入?

我想要一个菜单​​,你可以从中选择一些动作.

问题是,当我们选择一个,并按下"返回"键时,将跳过应该是下一步的用户输入命令.这是为什么 ?

代码是:

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
    int choice;

    do
    {
     printf("Menu\n\n");
     printf("1. Do this\n");
     printf("2. Do that\n");
     printf("3. Leave\n");
     scanf("%d",&choice);

     switch (choice)
     {
        case 1:
            do_this();
            break;
        case 2:
            // do_that();
            break;
     }

    } while (choice != 3);

    return(0);
}

int do_this()
{
    char name[31];

    printf("Please enter a name (within 30 char) : \n");
    gets(name); // I know using gets is bad but I'm just using it

    // fgets(name,31,stdin); // gives the …
Run Code Online (Sandbox Code Playgroud)

c printf flush switch-statement

4
推荐指数
1
解决办法
460
查看次数

为什么直接将字符串传递给printf正常工作?

我知道在C中这两个工作:

char* string = "foo";
printf("string value: %s", string);
Run Code Online (Sandbox Code Playgroud)

更简单地说:

printf("string value: %s", "foo");
Run Code Online (Sandbox Code Playgroud)

但我问自己为什么.

我知道%s标识符需要参数为char*,string实际上是(并且它与字符数组相同,因为这两种数据类型在C中非常相似)

但是当我直接传递一个字符串到printf时应该不一样吗?我的意思"foo"是不再是指针......对吗?

c string printf pointers

4
推荐指数
1
解决办法
125
查看次数

当使用两个不同的地址调用时,inet_ntoa会给出相同的结果

//
char ip1[] = "127.0.0.1";
char ip2[] = "211.100.21.179";
printf("ip1: %s\nip2: %s\n", ip1, ip2);

// 
long l1 = inet_addr(ip1);
long l2 = inet_addr(ip2);
printf("ip1: %ld\nip2: %ld\n", l1, l2);

//
struct in_addr addr1, addr2;
memcpy(&addr1, &l1, 4);
memcpy(&addr2, &l2, 4);
printf("%u\n", addr1.s_addr);
printf("%u\n", addr2.s_addr);

//
printf("%s\n", inet_ntoa(addr1));
printf("%s\n", inet_ntoa(addr2));

//
printf("%u,%s\n", addr1.s_addr, inet_ntoa(addr1));
printf("%u,%s\n", addr2.s_addr, inet_ntoa(addr2));
printf("%s <--> %s\n", inet_ntoa(addr1), inet_ntoa(addr2));
Run Code Online (Sandbox Code Playgroud)

输出是:

ip1: 127.0.0.1
ip2: 211.100.21.179
ip1: 16777343
ip2: 3004523731
16777343
3004523731
127.0.0.1
211.100.21.179
16777343,127.0.0.1
3004523731,211.100.21.179
211.100.21.179 <--> 211.100.21.179    // why …
Run Code Online (Sandbox Code Playgroud)

c printf

4
推荐指数
1
解决办法
386
查看次数

打印无效的C字符串成功

在编写一些字符串数组的初始化列表时,我不小心错过了一个冒号,这使我观察到printf可以成功打印无效的(0x0)字符串。这是我的C文件:

#include <stdio.h>
const char *names[3]=
{
    "a",
    "b" // missing colon here made names[1] == "bc"
    "c"
};

int main(int argc, char **argv)
{
    printf("name [2] = %s",names[2]);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我编译并执行它时,我得到的name [2] = (null)是“怪异的”,因为我认为仅仅崩溃应用程序才有意义,不是吗?我很难找到它的原因是因为我使用的某些字符串不是"b","c"而是诸如的单词null,nothing等等。 我的问题是:(1)为什么没有发出警告?(2)printf这种默认行为为何产生?

c string null printf

4
推荐指数
1
解决办法
73
查看次数

标签 统计

printf ×10

c ×9

string ×2

c++ ×1

c99 ×1

flush ×1

localization ×1

null ×1

pointers ×1

scanf ×1

switch-statement ×1