标签: printf

如果我的程序通过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
查看次数

Printf和Array

我被问到这个问题是一个课堂练习:

int A[] = {1,3,5,7,9,0,2,4,6};

printf("%d\n", *(A+A[1]-*A));
Run Code Online (Sandbox Code Playgroud)

我无法在纸上弄明白,所以继续编译一个简单的程序并对其进行测试,发现printf("%d",*A)总是给我1输出.

但我仍然不明白为什么会这样,所以如果有人能够解释这一点会很棒.

c arrays printf

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