我想更改我的vim配置文件,以便只突出显示我声明的变量,而不是关键字.本文展示并解释了我的意思:替代语法突出显示
我是vim的初学者(我从未更改过默认的配置文件).有人能指出我正确的方向吗?
syntax vim syntax-highlighting highlight vim-syntax-highlighting
如何使用变量指定scanf()应读入的最大字符数?
例如使用printf()你可以像这样使用*
#define MAXVAL 5
printf("Print at maximum MAXVAL chars: %.*s\n", MAXVAL, "myStringHere");
Run Code Online (Sandbox Code Playgroud)
这只会打印5个字符,如何才能scanf在MAXVAL中读取?MAXVAL必须用作长度说明符.我不能简单地做
scanf("%5s", string);
Run Code Online (Sandbox Code Playgroud)
现在我只能想到读入一个大数组scanf然后ssprintf用来将字符串存储到我的长度有限的字符串中.然而,使用长度说明符会更容易.
我有一个ncurses程序,我想使用CLion进行交互式调试.问题是当我在CLion中运行程序来调试它时,运行程序的内置控制台不能ncurses正确显示程序的输出.
我希望程序在我的系统终端中运行,这样我可以在使用CLions调试器调试程序时正确看到输出.
有没有办法做到这一点?
如果我声明一个像10个字符的char数组那么...
char letters[10];
Run Code Online (Sandbox Code Playgroud)
我是否创建了一组内存位置,从索引0-9表示为字符,然后第10个索引是空字节?
若是这样意味着我真的在内存中为数组创建11个位置(0到10),最后一个元素是空字节,或者我在内存中有10个位置(0到9)然后C在空格中添加空字节一个新位置(所以数组比我声明的长1个字节)?
谢谢
我正在阅读K&R的The C Programming Language,并对putchar和getchar感到困惑.我制作了一个程序,你输入10个字符,程序将它们打印回屏幕.
#include <stdio.h>
int main()
{
int i;
int ch;
for(i = 0; i < 10; i++)
{
printf("Enter a single character >> ");
ch = getchar();
putchar(ch);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我希望得到这样的输出:
Enter a single character >> a
a
Enter a single character >> b
b
Run Code Online (Sandbox Code Playgroud)
...等等10次,但这是我得到的输出:(进入2个字符后我停止了)
Enter a single character >> a
aEnter a single character >>
Enter a single character >> b
bEnter a single character >>
Enter a single character >>
Run Code Online (Sandbox Code Playgroud)
不确定为什么我的输入字符与固定字符串组合并被输出.
另外,我不太清楚为什么使用int来存储字符.
#include <stdio.h>
int main(void)
{
int (*fp)(void);
printf("Loopy.\n");
fp = &main; //point to main function
fp(); //call 'main'
return 0;
}
Run Code Online (Sandbox Code Playgroud)
而不是无限地执行循环,"循环"在我的机器上执行大约10-20秒,然后获得标准的Windows应用程序崩溃报告.为什么是这样?
编译器:GCC IDE:Code :: Blocks OS:Win7 64bit

在阅读了K&R的C语言编程语言之后,我遇到了#define符号常量.我决定定义......
#define INTEGER_EXAMPLE 2
#define CHAR_EXAMPLE 2
Run Code Online (Sandbox Code Playgroud)
...所以我的问题是C如何知道我是在定义int还是char类型?
由于将两个指针放在一起是非法的,这段代码片段有效吗?
struct key *low = &tab[0];
struct key *high = &tab[n];
struct key *mid;
while (low < high)
{
mid = low + (high-low) / 2; //isn't this adding pointers?
//code continues...
Run Code Online (Sandbox Code Playgroud)
while循环中的第一个语句似乎将两个地址加在一起,这是如何合法的?
此代码来自K&Rs的C编程语言(第122页)
我的理解如下:
char *指向一个字符串常量,修改它指向的数据是未定义的.但是,您可以更改指向的位置.
char[] 指内存块,您可以更改其内容但不能更改其内容.
strcpy(dest, src)复制src到dest.
我的问题是,这是不正确的使用strcpy()与dest作为一个char * 在已经指向的东西(我beleive旧的内容将被覆盖strcpy()-这是不确定的行为)?
例如:
char *dest = malloc(5);
dest = "FIVE";
char *src = malloc(5);
src = "NEW!";
strcpy(dest, src); /* Invalid because chars at dest are getting overwritten? */
Run Code Online (Sandbox Code Playgroud) 如果我有以下代码,那么句子在哪里sprintf存储?
它是存储在提供的100个字节malloc中还是存储在其他地方,store指针现在指向新位置?
char *store = malloc(100);
int num = 77;
sprintf(store, "the number was: %d", num);
Run Code Online (Sandbox Code Playgroud)