标签: printf

C:使用printf时出现分段错误

这可能很简单,但我似乎无法让它工作.

我有这个非常简单的代码片段:

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

int main(void)
{

  char buf[100];
  char *p = buf;

  strcpy(p, "Test string");

  printf("%s\n", *p);

}
Run Code Online (Sandbox Code Playgroud)

当我运行它时会导致分段错误.GDB输出:

Program received signal SIGSEGV, Segmentation fault.
0xb76af3b3 in strlen () from /lib/i686/cmov/libc.so.6
Run Code Online (Sandbox Code Playgroud)

但我仍然没有得到它.

评论将不胜感激,谢谢.

c printf pointers segmentation-fault

6
推荐指数
2
解决办法
2万
查看次数

php sprintf格式字符串

我知道sprintf但我怎么能在任何地方使用相同的param?例

sprintf("blabla %s 11111 %s", "test");
Run Code Online (Sandbox Code Playgroud)

- 比如说几个参数,但我想把'测试'放在两个地方,没有重复

php printf string-formatting

6
推荐指数
1
解决办法
8530
查看次数

Mysql查询:date_format和sprintf()

我想在MySQL查询中使用sprintf()和date_format.

这是查询:

mysql_select_db($database_exdb, $expdb);
$query_eventeditrs = sprintf("SELECT eventid, groupid, title, DATE_FORMAT(dateofevent, '%W, %M %d, %Y'), timeofevent, location, details, presenter, bio FROM events WHERE eventid = %s", GetSQLValueString($colname_eventeditrs, "int")); 
Run Code Online (Sandbox Code Playgroud)

我收到的错误是:

“Warning: sprintf() [fun
ction.sprintf]: Too few arguments. Query was Empty” 
Run Code Online (Sandbox Code Playgroud)

Plz的帮助

php mysql printf date-format

6
推荐指数
1
解决办法
5198
查看次数

为什么这个c程序不打印第一个printf语句?

#include<stdio.h>
#include <unistd.h>
int main(){
      while(1)
      {

              fprintf(stdout,"hello-out");
              fprintf(stderr,"hello-err");
              sleep(1);
      }
      return 0;
}
Run Code Online (Sandbox Code Playgroud)

在gcc中编译这个程序并执行它只打印hello-err而不是hello-out.为什么会这样?有人可以解释它背后的原因吗?

c printf

6
推荐指数
1
解决办法
3252
查看次数

(s)printf FORMAT字符串的权威正则表达式

我想回答这个问题有

要获得Perl的所有花哨格式和对哈希数据的键控访问,您需要一个(更好的版本)函数:

# sprintfx(FORMAT, HASHREF) - like sprintf(FORMAT, LIST) but accepts
# "%<key>$<tail>" instead of "%<index>$<tail>" in FORMAT to access the
# values of HASHREF according to <key>. Fancy formatting is done by
# passing '%<tail>', <corresponding value> to sprintf.
sub sprintfx {
  my ($f, $rh) = @_;
  $f =~ s/
     (%%)               # $1: '%%' for '%'
     |                  # OR
     %                  # start format
     (\w+)              # $2: a key to access the HASHREF
     \$                 # end …
Run Code Online (Sandbox Code Playgroud)

regex perl printf

6
推荐指数
1
解决办法
2328
查看次数

使用print_r或php中的任何其他函数打印多个数组

我需要在我的代码中打印多个数组的内容.例如

   function performOp($n, $inputArr, $workArr)
    {
        printf("Entered function, value of n is %d", $n);
    print_r($inputArr);
    print_r($workArr);
        $width =0;
    }

现在,有没有什么方法可以编写单个语句并打印两个数组,而不是写两次print_r?另外,如果我想在显示数组{}之前打印"输入数组值是",有没有办法使用printf或任何其他功能?

我试着写作

    printf("Value of inputArray is %s ", print_r($inputArr)
,但这不起作用.

任何帮助都非常感谢.

谢谢

php arrays printf var-dump

6
推荐指数
1
解决办法
4502
查看次数

C99 printf中的可变前导零

我在C99写了一个Multiprecision Library.根据我的代码编译的平​​台,我选择不同的表示基础.

所以,例如,假设在平台X上系统选择BASE = 100; 在平台上Y BASE = 10000;

假设我代表大的unsigned int如下:

typedef struct a {
       big_enough_uint *digits;
       unsigned int length;
       unsigned int last;
} bigUint;
Run Code Online (Sandbox Code Playgroud)

所以,当我在BASE-100系统上时,我想要我的打印功能

void my_print(bigUint *A){
     unsigned int i=0;

     fprintf(stdout,"%d",A->digits[0]);
     if(i!= A->last){
          for(;i<=A->last;i++)
                fprintf(stdout,"%02d",A->digits[i]);
     }
     printf(stdout,"\n");
}
Run Code Online (Sandbox Code Playgroud)

在BASE-10000系统上,我希望它是类似的

void my_print(bigUint *A){
     unsigned int i=0;

     fprintf(stdout,"%d",A->digits[0]);
     if(i!= A->last){
          for(;i<=A->last;i++)
                fprintf(stdout,"%04d",A->digits[i]);
     }
     printf(stdout,"\n");
}
Run Code Online (Sandbox Code Playgroud)

我为什么要这样做?

假设我有以下数字:

12345600026789
Run Code Online (Sandbox Code Playgroud)

在BASE-100表示​​中,数字数组将是(小端形式):

12|34|56|0|2|67|89
         ^ ^ I want ONE LEADING ZEROES
Run Code Online (Sandbox Code Playgroud)

在BASE-10000中:

12|3456|2|6789
        ^ I want THREE LEADING ZEROES
Run Code Online (Sandbox Code Playgroud)

有一个简单的方法吗?

c printf

6
推荐指数
1
解决办法
1561
查看次数

自定义支持__attribute __((格式))

GCC和Clang都支持对变量参数函数进行编译时检查printf.这些编译器接受如下语法:

extern void dprintf(int dlevel, const char *format, ...)
  __attribute__((format(printf, 2, 3)));  /* 2=format 3=params */
Run Code Online (Sandbox Code Playgroud)

在OSX上,Cocoa框架也使用它的扩展NSString:

#define NS_FORMAT_FUNCTION(F,A) __attribute__((format(__NSString__, F, A)))
Run Code Online (Sandbox Code Playgroud)

在我们公司,我们有一个自定义C++框架,其中包含一大堆类,如BaseString所有类BaseObject.在BaseString有几个可变参数的方法类似sprintf,但也有一些扩展.例如,"%S"期望一个类型的参数BaseString*,并"%@"期望一个BaseObject*参数.

我想对我们项目中的参数执行编译时检查,但由于扩展,会__attribute__((format(printf)))给出大量误报警告.

有没有办法定制__attribute__((format))两个编译器之一的支持?如果这需要编译器源的补丁,它是否可以在合理的时间内完成?或者,是否还有其他类似工具的lint可以执行检查?

c c++ printf gcc clang

6
推荐指数
2
解决办法
1925
查看次数

vsnprintf_s是否已弃用vsnprintf?

在我的代码(严格的C,而不是C++)中,我用这种方式使用vsnprintf:

char* buf = NULL;
size_t sz;
sz = vsnprintf( buf, 0, format, args); // Ask vsnprintf how big a buffer we need

buf = (char*) malloc(sz + 1);
vsnprintf( buf, sz, format, args); // Now actually fill the buffer
/* Use buf in a dialog box... then: */
free(buf);
Run Code Online (Sandbox Code Playgroud)

但MS Visual C++(MSVS10)编译器警告:

warning C4996: 'vsnprintf': This function or variable may be unsafe. Consider using vsnprintf_s instead. 
Run Code Online (Sandbox Code Playgroud)

但是,vsnprintf_s也不能有漂亮的功能,当您为缓冲区传递NULL它将描述多少数据它会打印.相反,它被记录为返回-1.

我觉得我vsnprintf通过确定必要的尺寸以安全的方式使用,并且建议的更换,vsnprintf_s …

c printf visual-studio-2010

6
推荐指数
1
解决办法
8393
查看次数

从R中的底层C函数中抑制消息

在脚本中,我经常调用该函数Rcplex(),该函数将"CPLEX环境打开"和"已关闭的CPLEX环境"打印到控制台.由于该函数被频繁调用,因此它经常打印,这非常烦人.有没有办法压制这个?我试过sink(),suppressWarnings/Messages或invisible(catch.output())但这些都不奏效了.我继续检查代码Rcplex()并找到打印到控制台的位置.Rcplex()调用底层的C函数(Rcplex.c).在rcplex.c的代码中,我找到了导致打印的命令:

    REprintf("CPLEX environment opened\n");
    REprintf("Closed CPLEX environment\n");
Run Code Online (Sandbox Code Playgroud)

有没有办法捕获输出,REprintf()以便它不会打印到R控制台?一种方法显然是弄乱Rcplex.c文件并删除相应的行.但是,这不是一个非常干净的解决方案,这就是为什么我要求另一种方法来捕获C函数的输出.

c console printf r output

6
推荐指数
1
解决办法
394
查看次数