相关疑难解决方法(0)

C中的结构继承

是否可以在标准C或C++中继承另一个结构?

c c++

3
推荐指数
2
解决办法
2332
查看次数

lual_dofile(); 不会用C++和Lua加载脚本

您好我正在尝试使此代码正常工作

extern "C"
{
#include <lua.h>
#include "lualib.h"
#include "lauxlib.h"
}

#include "glew.h"
#define GLEW_STATIC
#include "SDL/SDL.h"
#include "SDL/SDL_image.h"
#include <stdlib.h>
#include <iostream>
#include <fstream>




////////////////////////
////////////////////////
test.h
void Test(void)

{
    int status;

**//The Lua Interpreter**
lua_State  *L = lua_open();


**//Open Lua Libarys**
luaL_openlibs(L);



**//Run Lua Script**
status = luaL_loadfile(L,"Test.lua");

printf( "actually getting to this point!");
getchar();
//Close Lua
lua_close(L);



}
Run Code Online (Sandbox Code Playgroud)

这个名字叫test.lua这是我的lua文件

print"Whats your name?"

function sleep(n)
end
Run Code Online (Sandbox Code Playgroud)

这不起作用:(

lual_dofile(L, "Test.lua");

孔程序编译,但然后不执行脚本或显示运行的lua脚本的任何视觉反馈有没有人遇到此问题之前?并且知道为什么?**

c++ lua file

3
推荐指数
1
解决办法
4193
查看次数

获取c信息的好方法是什么?

我的意思是这个问题与其他编程语言不同,我可以简单地谷歌"实现类似的接口java"或"图形绘制python",每当我谷歌一个C问题,似乎大多数结果是关于C#或C++

我试过说ANSI C或C99,但那不太成功.我把我的朋友在大学借给我的K&R C圣经,有没有哪些网站是明确的c源?

c reference

3
推荐指数
1
解决办法
104
查看次数

C vs C++函数问题

我正在学习C,在开始学习C++作为我的第一个编译语言后,我决定"回归基础"并学习C.

关于每种语言处理函数的方式,我有两个问题.

首先,为什么C"不关心"函数定义的范围,而C++呢?

例如,

int main()
{
    donothing();
    return 0;
}

void donothing() { }
Run Code Online (Sandbox Code Playgroud)

以上内容不会在C++编译器中编译,而是在C编译器中编译.为什么是这样?C++不仅仅是C的扩展,而且应该主要是"向后兼容"吗?

其次,我找到的书(链接到pdf)似乎没有说明主函数的返回类型.我查看并找到其他书籍和网站,这些也通常不指定主要功能的返回类型.如果我尝试编译一个没有为main指定返回类型的程序,它在C编译器中编译很好(尽管有一些警告),但它不能在C++编译器中编译.再说一次,为什么呢?是否更好的风格总是将返回类型指定为整数而不是将其遗漏?

感谢您提供任何帮助,并且只是作为旁注,如果有人可以推荐一本我应该购买的更好的书,那就太好了!

c c++ scope return function

3
推荐指数
1
解决办法
1047
查看次数

格式'%s'需要'char*'类型的参数

为了在C中练习我的编程技巧,我试图自己编写strncpy函数.这样做我总是遇到错误,解决了大部分错误,最终我没有进一步的灵感继续下去.

我收到的错误是:

ex2-1.c:29:3: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘int’ [-Wformat=]
   printf("The copied string is: %s.\n", stringb);
Run Code Online (Sandbox Code Playgroud)

问题是,这是一个非常常见的错误,并且它也已经在SO上描述,但我似乎无法应用其他人已经指出的提示.我知道在打印变量时我使用了错误的类型,当我使用%d格式时,它将返回一个整数,这可能是第一个字符的ASCII值,因为它在增加最大数字时不会改变要复制的字节数.

使用GDB我发现迭代通过while循环的b变量保持正确的字符串,但我似乎无法打印它.

我可能缺乏关于C语言的非常基本的知识部分而且我为这个新手问题(再一次)提出了道歉.如果您能提供反馈或指出我的代码中的其他缺陷,我将不胜感激.

#include <stdlib.h>
#include <stdio.h>

void strmycpy(char **a, char *b, int maxbytes) {
  int i = 0;
  char x = 0;

  while(i!=maxbytes) {
  x = a[0][i];
  b[i] = x;
  i++;
  }

  b[i] = 0;

}


int main (int argc, char **argv) {
  int maxbytes = atoi(argv[2]);
  //char stringa;
  char stringb;
  if (argc!=3 || …
Run Code Online (Sandbox Code Playgroud)

c string printf strcpy strncpy

3
推荐指数
1
解决办法
8566
查看次数

从K&R的"C编程语言"中理解关于char和int类型的段落

关于第1章:Kernighan和Ritchie的教程介绍中的这段经文:C编程语言(我已经加粗了我需要澄清的具体部分,并在下面详细阐述):

给定getchar和putchar,您可以编写大量有用的代码,而无需了解有关输入和输出的更多信息.最简单的例子是一个程序,一次将其输入复制到输出一个字符:读取字符while(字符不是文件结束指示符)输出字符只读取读取字符将其转换为C给出:

#include <stdio.h>
/* copy input to output; 1st version */ main()
{
       int c;
       c = getchar();
       while (c != EOF) {
           putchar(c);
           c = getchar();
       }
}
Run Code Online (Sandbox Code Playgroud)

关系运算符!=表示"不等于".键盘或屏幕上似乎是一个字符,当然,就像其他一切一样,内部存储就像一个位模式.char类型专门用于存储此类字符数据,但可以使用任何整数类型.我们使用int是一个微妙但重要的原因.

问题是区分输入结束和有效数据.解决方案是当没有更多输入时,getchar返回一个独特的值,这个值不能与任何真实字符混淆.对于"文件结束",该值称为EOF.我们必须声明c是一个足够大的类型,以保存getchar返回的任何值.我们不能使用char,因为除了任何可能的char之外,c必须足够大以容纳EOF.因此我们使用int.

我的理解是Char是一种Int,但它只是更小(与Int16,Int32,Int64在其他语言中相同,但可以表示数字的大小).

我知道每个字符都可以用Char类型的整数表示,那么为什么EOF值不能表示为Char?是因为Char类型中的每个整数都已被考虑,甚至还有一个数字对于数据类型而言太大了?

任何解释或更正我的知识将不胜感激.

c types kernighan-and-ritchie

3
推荐指数
1
解决办法
433
查看次数

C语言是按引用调用吗?

我知道C语言中没有按引用调用。但是,有些人说C中有一个引用调用。我很困惑。

据我所知,当将因子交给C中的函数时,我知道传递给函数的值是通过制作本地副本作为参数来接收的。

然而,在C++中,“通过引用调用”是可能的,因为“仅因子和名称不同的相同元素”是通过引用“&”创建的。真的吗?

c

3
推荐指数
2
解决办法
806
查看次数

K&amp;R 书中指出使用赋值运算符只会计算表达式一次?

我正在阅读《K&R C 编程语言》,第 2.10 章中指出:

“如果 expr1 和 expr2 是表达式,那么

expr1 op= expr2
Run Code Online (Sandbox Code Playgroud)

相当于

expr1 = (expr1) op (expr2)
Run Code Online (Sandbox Code Playgroud)

除了 expr1 仅计算一次。”

op=指的是可以与赋值一起使用的二元运算符+=-=例如 等(并且在第二行中 op 仅表示二元运算符,例如+

我的第一个小困惑是它expr1必须只是一个变量(“左值”)?否则我们如何将结果分配给更大的表达式?expr1但我的主要问题是“仅计算一次”是什么意思?如果我们写:

expr1 = (expr1) op (expr2)
Run Code Online (Sandbox Code Playgroud)

代替

expr1 op= expr2 
Run Code Online (Sandbox Code Playgroud)

c

3
推荐指数
1
解决办法
75
查看次数

这里逻辑运算符如何短路?

#include <stdio.h>

int main()
{
   int x = -2;
   while (x++ || x==0)
   {
      printf("X");
   }
}
Run Code Online (Sandbox Code Playgroud)

输出如下

XX

为什么?

我期望这段代码进入无限循环,因为增量将使逻辑或的任一侧都为真。

c logical-operators

3
推荐指数
1
解决办法
63
查看次数

为什么K&R的某些代码在Code:Blocks中不起作用?

当我完全键入它们时,K&R中的一些示例在Code:Blocks中不起作用.例如,这个程序:

#include <stdio.h>
main()
{
    long nc;
    nc = 0;
    while (getchar() != EOF)
        ++nc;
    printf("%ld\n", nc);
}
Run Code Online (Sandbox Code Playgroud)

当我输入此代码并运行它时,程序要么冻结,要么在按Enter键时不执行任何操作.

下面的程序做同样的事情(计算一个字符串中的字符),它的工作原理.

#include <stdio.h>
int main()
{
    char s[1000];
    int i;
    scanf("%s",s);
    for(i=0; s[i]!='\0'; ++i);
    printf("Length of string: %d",i);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么吗?自K&R第二版以来C是否已被更改或我做错了什么?

c kernighan-and-ritchie

2
推荐指数
1
解决办法
529
查看次数