为什么fprintf在以下示例程序中给出不同的结果?
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.
但是,使用
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语言中printf函数的定义是:
int printf(const char * _Format, ...);
Run Code Online (Sandbox Code Playgroud)
对于scanf管理可变数量的参数的许多类似函数也是如此.
为什么有_Format强制参数?
我正在研究一个更新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) 我正在使用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) 每次我运行这个程序,我会得到不同的和奇怪的结果.这是为什么?
#include <stdio.h>
int main(void) {
int a = 5, b = 2;
printf("%.2f", a/b);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
运行此代码段:
wchar_t *wstr = L"áßå®";
wprintf(L"%s",wstr);
Run Code Online (Sandbox Code Playgroud)
给出输出:
«
代替
áßå®
我是新来的wchar_t.我如何获得预期的输出?
#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时,有人能解释这个吗?
嗨,我有"评论"表,这里有一个名为"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) 我被问到这个问题是一个课堂练习:
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输出.
但我仍然不明白为什么会这样,所以如果有人能够解释这一点会很棒.