标签: printf

Bash&Printf:我怎样才能正确填充和截断?

在Bash ......

我知道如何用printf正确填充

printf "%-10s" "potato"
Run Code Online (Sandbox Code Playgroud)

我知道如何用printf截断

printf "%.10s" "potatos are my best friends"
Run Code Online (Sandbox Code Playgroud)

我怎么能同时做到这两件事?

LIST="aaa bbbbb ccc ddddd"
for ITEM in $LIST; do
  printf "%-.4s blah" $ITEM
done
Run Code Online (Sandbox Code Playgroud)

这打印

aaa blah
bbbbb blah
ccc blah
ddddd blah
Run Code Online (Sandbox Code Playgroud)

我想要它打印

aaa  blah
bbbb blah
ccc  blah
dddd blah
Run Code Online (Sandbox Code Playgroud)

我宁愿不做这样的事情(除非别无选择):

LIST="aaa bbbbb ccc ddddd"
for ITEM in $LIST; do
  printf "%-4s blah" $(printf "%.4s" "$ITEM")
done
Run Code Online (Sandbox Code Playgroud)

虽然,显然,这是有效的(感觉丑陋和hackish).

bash printf truncate padding

3
推荐指数
1
解决办法
563
查看次数

如果我的程序通过CTRL-C终止,为什么使用fprintf输出的字符串最终没有写入输出文件?

为什么fprintf在以下示例程序中给出不同的结果?

例1:

int main(){
    FILE *f;
    char buf[512];
    char name[128] = {"filename"};

    f = fopen(name, "w");
    fprintf(f, "asdas\n");
    fprintf(f, "asdas\n");
    while(1){}
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果我使用CTRL+ 终止此程序C,我会得到一个名为的空文件filename.

但是,使用

例2:

int main(){
    FILE *f;
    char buf[512];
    char name[128] = {"wpa_supplicant.conf"};

    f = fopen(name,"w");
    while(1){
        fprintf(f, "asdas\n");
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果我使用CTRL+ 终止这个程序C,我得到文件命名filename,它包含许多带字符串的行asdas.

为什么在第一个示例中字符串没有写入文件,但是在第二个示例中它们被写入文件?

c file-io printf

3
推荐指数
1
解决办法
240
查看次数

为什么printf需要强制参数?

C语言中printf函数的定义是:

int printf(const char * _Format, ...);
Run Code Online (Sandbox Code Playgroud)

对于scanf管理可变数量的参数的许多类似函数也是如此.

为什么有_Format强制参数?

c printf

3
推荐指数
1
解决办法
335
查看次数

将负数传递给C中的“%hu”

我无法在CodeBlocks中使用它。此代码将输出什么?:

printf( "%hu" ,  ?1 );
Run Code Online (Sandbox Code Playgroud)

c printf unsigned short codeblocks

3
推荐指数
1
解决办法
8052
查看次数

当size_t溢出时,"<"和">"运算符是否正常工作?

我正在研究一个更新20年代码的项目,其中许多问题都与整数溢出有关.我想确保我正确测试溢出,所以我写了一个测试程序.它的输出让我感到沮丧.这里是:

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

int main (void) {

   size_t largerNum,Num;

   largerNum = 12;
   Num = UINT_MAX;

   printf("largerNum = %u\nNum = %u\nNum + 1 = %u\n", largerNum    , Num, Num + 1);

   largerNum = Num + 1;

   printf("largerNum now = %u\n", largerNum);

   if(largerNum < Num ){
      printf("largerNum overflowed to %u\n", largerNum);
   }
   else {
      printf("largerNum did not overflow: %u\n", largerNum);
   }

   printf("Is (0 < UINT_MAX)?\n");

   (0 < UINT_MAX)?printf("YES\n"):printf("NO\n");

   printf("Is (largerNum < Num)?\n");

   (largerNum < Num)?printf("YES\n"):printf("NO\n");

   return …
Run Code Online (Sandbox Code Playgroud)

c printf overflow size-t operator-keyword

3
推荐指数
1
解决办法
105
查看次数

为什么_stprintf_s会覆盖其他变量,但_stprintf不是?

我正在使用visual studio for win32编程类.我有一个全局数组的字符串声明TCHAR **bufTh在内存中分配,如

bufTh = (TCHAR**)malloc(nOfTh*sizeof(TCHAR*));
for (i = 0; i < nOfTh; i++)
    bufTh[i] = (TCHAR*)malloc(BUF_LEN*sizeof(TCHAR));
Run Code Online (Sandbox Code Playgroud)

然后我有一些线程,每个线程在这个数组中写入不同的字符串.我注意到,如果我使用_stprintf_s(bufTh[iTh], BUF_LEN, _T("%s\\"), findData.cFileName);,在这个操作之后,其他一些全局变量(在我的情况下是信号量)被覆盖,而如果我使用_stprintf(没有_s)一切顺利.

为什么?我哪里错了?

我也尝试过使用包含字符串的struct数组,typedef struct{TCHAR buf[BUF_LEN];} mystr_t;然后再分配bufTh = (mystr_t*)malloc(nOfTh*sizeof(mystr_t));.在这种情况下_stprintf_s按预期工作没有问题.

编辑:这是一个mcve

#define UNICODE
#define _UNICODE
#define _CRT_SECURE_NO_WARNINGS
#define _CRT_NON_CONFORMING_SWPRINTFS
#include <Windows.h>
#include <tchar.h>
#include <stdio.h>
#include <stdlib.h>
#define BUF_LEN _MAX_PATH+1

typedef struct{
    DWORD iTh;
} tdata_t;

TCHAR **bufTh;
PHANDLE sem;

//DWORD WINAPI rThread(LPVOID pThParam);

int _tmain(int argc, LPTSTR …
Run Code Online (Sandbox Code Playgroud)

c++ malloc winapi printf

3
推荐指数
1
解决办法
1983
查看次数

为什么两个整数的除法返回0.00?

每次我运行这个程序,我会得到不同的和奇怪的结果.这是为什么?

#include <stdio.h>

int main(void) {
    int a = 5, b = 2;
    printf("%.2f", a/b);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c printf format-specifiers

3
推荐指数
2
解决办法
164
查看次数

打印wchar_t会产生奇怪的输出

运行此代码段:

wchar_t *wstr = L"áßå®";
wprintf(L"%s",wstr);
Run Code Online (Sandbox Code Playgroud)

给出输出:

«

代替

áßå®

我是新来的wchar_t.我如何获得预期的输出?

c printf wchar-t format-specifiers

3
推荐指数
1
解决办法
437
查看次数

使用%f输出EOF

#include<stdio.h>
int main()
{
    printf("%d",EOF);
}
Run Code Online (Sandbox Code Playgroud)

生成-1这完全没问题,但是

#include<stdio.h>
int main()
{
    printf("%f",EOF);
}
Run Code Online (Sandbox Code Playgroud)

产生0.000.当预期输出为-1.000时,有人能解释这个吗?

c io printf eof format-specifiers

3
推荐指数
2
解决办法
129
查看次数

当值具有Quote时,列值的字符串长度减1

嗨,我有"评论"表,这里有一个名为"comment_text"的字段,我将这样的评论插入到表中

   $query="insert into `comments` 
    (`id`,
    `comment_text`, 
    `date`) 
    values
    ('',
    '".sprintf("%-70s",mysql_real_escape_string(ucwords(trim($strTitle63_5))))."',
    '$date')";
Run Code Online (Sandbox Code Playgroud)

如您所见,我将注释长度设置为固定70个字符(原始注释总是少于70个字符.)

一切正常,除非我插入带引号的值,如果我插入带引号的注释,在数据库表中我只能看到69个字符.

示例:

我插入这两条评论

评论1:"统一费率与另一个统一费率代码重叠"

评论2:"索赔细节不符合BSI/BRI指南"

后来当我尝试检查字符串长度.评论1是70,评论2是69.这有什么理由吗?

每个有引用的评论都会给我这个问题.:(.

提前致谢 .

UPDATE

我的代码

模型

function get_coc5_comment_details()
{
    $this->db->select("comment_text");
    $this->db->from("comments");
    $result=$this->db->get();

    return $result->result_array();
}
Run Code Online (Sandbox Code Playgroud)

调节器

function validate_db()
{
    $result = $this->invoice_model->get_comment_details();
    $this->load->view("comment_details_view",array("result"=>$result));
}
Run Code Online (Sandbox Code Playgroud)

视图

foreach ($result as $row)
{
    $comment = $row['comment_text'];

    echo strlen($comment)."<br>";
}
Run Code Online (Sandbox Code Playgroud)

php mysql printf codeigniter

3
推荐指数
1
解决办法
53
查看次数