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) 当我尝试编译这个时,我得到以下错误,不知道为什么......
警告:格式'%x'需要'unsigned int'类型的参数,但参数2的类型为'char*'[-Wformat =]
Run Code Online (Sandbox Code Playgroud)printf("Name buffer address: %x\n", buffer);
代码:
#include <string.h>
#include <stdio.h>
main(){
char name[200];
printf("What is your name?\n");
scanf("%s", name);
bo(name, "uname -a");
}
int bo(char *name, char *cmd){
char c[40];
char buffer[40];
printf("Name buffer address: %x\n", buffer);
printf("Command buffer address: %x\n", c);
strcpy(c, cmd);
strcpy(buffer, name);
printf("Goodbye, %s!\n", buffer);
printf("Executing command: %s\n", c);
fflush(stdout);
system(c);
}
Run Code Online (Sandbox Code Playgroud) int main()
{
printf("%d %d",1,2,3,4,5);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:1,2
int main()
{
printf("%d %d",(1,2,3,4,5));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:5,垃圾值
那么请解释为什么添加括号/括号会有所不同?