``` char* p_buf = NULL; ```printf pbuf
时间: 2024-09-18 18:15:45 浏览: 68
在C语言中,当你声明了一个指向字符(char)的指针 `char* p_buf = NULL;` 并将其初始化为 `NULL` 表示该指针尚未指向任何有效的内存位置。因此,尝试打印 `p_buf` 直接会输出空值或者是一个特殊的终止符(如`\0`),因为你并没有将它指向一个已经存储了字符的内存区域。
如果你想要正确地打印字符串,你需要首先给 `p_buf` 分配足够的空间并存储至少一个字符串前缀(通常是`'\0'`),然后才能使用 `printf` 函数。例如:
```c
// 假设你想打印 "Hello, World!"
int len = strlen("Hello, World!"); // 计算字符串长度
char* p_buf = (char*)malloc(len + 1); // 动态分配内存
strcpy(p_buf, "Hello, World!"); // 将字符串复制到 p_buf
// 打印
printf("%s", p_buf);
// 不忘记释放内存
free(p_buf);
```
这样 `printf` 会正确地输出字符串内容。如果没有动态分配内存,那么直接打印 `p_buf` 是不会有任何意义的,因为它指向的是未初始化的内存。
相关问题
#include "stdio.h" #include "string.h" #define ACC -2 #define sy_if 0 #define sy_then 1 #define sy_else 2 #define sy_while 3 #define sy_begin 4 ...../宏定义/ char ch='\0'; int count=0; static char spelling[10]={""}; static char line[81]={""}; char *pline; static char ntab1[10][10]; struct rwords { char sp[10]; int sy; }; struct rwords reswords[10]={{"if",sy_if}, {"do",sy_do},{"esle",sy_else},{"while",sy_while},{"then",sy_then}, {"begin",sy_begin},{"end",sy_end},{"and",op_and},{"or",op_or} ,{"not",op_not}}; struct aa { int sy1; int pos; }buf[100]; int ssp=0; int tt1=0; int lnum=0; FILE *cfile; int nlength=0; struct aa *pbuf=buf; /****************************/ readline()/读入行 { ………… } *pline='\0'; pline=line;} /****************************/ readch()/读入字符 …… } ch=*pline; pline++; } /********************************/ find(char spel[])/查找 {...... } identifier()/标识符识别 { ........ } /*************************/ number()/常数识别 {.......} scan()/扫描程序 {while(ch!='~') {switch(ch) {case ' ': break; case 'a': case 'b': ...... case 'z': identifier();break; case '0': case '1': ....... case '9': number();break; case '<':readch();if(ch=='=') {buf[count].pos=0;} else{if(ch=='>')buf[count].pos=4; else{buf[count].pos=1;pline--;}} buf[count].sy1=rop; count++;break; case '>':readch();if(ch=='='){buf[count].pos=2;} else{buf[count].pos=3;pline--;} buf[count].sy1=rop; count++;break; case '(': buf[count].sy1=lparent;count++;break; case ')':buf[count].sy1=rparent;count++;break; case '#':buf[count].sy1=jinhao;count++;break; case '+':buf[count].sy1=plus;count++;break; case '*':buf[count].sy1=times;count++;break; case ':':readch();if(ch=='=')buf[count].sy1=becomes; count++;break; case '=':buf[count].sy1=rop;buf[count].pos=5;count++;break; case ';':buf[count].sy1=semicolon;count++;break; } readch(); }buf[count].sy1=-1; }/***********************/ disp1()/输出 {.... } disp2() {....../输出 } main() { if((cfile=fopen("PAS.C","r"))==NULL) {printf("file not open\n");exit(0);} readch(); scan(); disp1(); disp2();
这段代码是一个简单的词法分析器,可以用于识别 Pascal 语言的单词和符号,并输出它们的种类和位置。其中,readline() 和 readch() 用于读入一行和一个字符,identifier() 和 number() 用于识别标识符和常数,find() 用于查找保留字,scan() 用于扫描整个程序并进行词法分析,disp1() 和 disp2() 用于输出结果。这段代码中使用了一些宏定义和结构体来简化代码。
阅读全文