相关疑难解决方法(0)

指向C中的字符串?

char *ptrChar;
Run Code Online (Sandbox Code Playgroud)

我知道这ptrChar是一个指向char的指针.指向字符串的命令是什么?

编辑:如果它是相同的(ptr到char与ptr到字符串) - 下面的变量定义代表什么?

char (*ptr)[N];
Run Code Online (Sandbox Code Playgroud)

我糊涂了.

c string pointers

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

如何使用C#中的struct pointer参数调用C++函数?

还有一个功能,它还没有工作.我基本上是通过使用P/Invoke从C#调用一些C++函数.有问题的功能确实向显示激光设备查询一些设备相关信息,例如最小和最大扫描速率以及每秒最大点数.

有问题的功能是:

int GetDeviceInfo(DWORD deviceIndex, DeviceInfo* pDeviceInfo);
Run Code Online (Sandbox Code Playgroud)

这是我给出的C++头文件.这是非常简短的C++ SDK描述的链接.我没有重建DLL文件的源代码,我也没有*.pdb文件(制造商无法提供):

#pragma once

#ifdef STCL_DEVICES_DLL
#define STCL_DEVICES_EXPORT extern "C" _declspec(dllexport) 
#else
#define STCL_DEVICES_EXPORT extern "C" _declspec(dllimport)
#endif

enum SD_ERR
{
    SD_ERR_OK = 0,
    SD_ERR_FAIL,
    SD_ERR_DLL_NOT_OPEN,
    SD_ERR_INVALID_DEVICE,  //device with such index doesn't exist
    SD_ERR_FRAME_NOT_SENT,
};

#pragma pack (1)
struct LaserPoint
{
    WORD x;
    WORD y;
    byte colors[6];
};

struct DeviceInfo
{
    DWORD maxScanrate;
    DWORD minScanrate;
    DWORD maxNumOfPoints;
    char type[32];
};

//////////////////////////////////////////////////////////////////////////
///Must be called when starting to use
//////////////////////////////////////////////////////////////////////////
STCL_DEVICES_EXPORT int …
Run Code Online (Sandbox Code Playgroud)

c# c++ dll interop dllimport

9
推荐指数
1
解决办法
752
查看次数

C字符串指针与数组

可能重复:
C中的char s []和char*s有什么区别?

为什么是:

char *ptr = "Hello!"
Run Code Online (Sandbox Code Playgroud)

不同于:

char ptr[] = "Hello!"
Run Code Online (Sandbox Code Playgroud)

具体来说,我不明白为什么你可以使用(*ptr)++来改变数组中'H'的值,而不是指针.

谢谢!

c

8
推荐指数
3
解决办法
9927
查看次数

c删除数组的第一个字符

我有一个字符串:

str1 = "abcabcabc";
Run Code Online (Sandbox Code Playgroud)

如何删除第一个字符?我希望最终结果是:

str1 = "bcabcabc";
Run Code Online (Sandbox Code Playgroud)

c

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

关于C中指针和字符串的问题

可能重复:
C中的char s []和char*s有什么区别?
char*str ="..."和char str [N] ="......"之间的区别?

我有一些令我困惑的代码.

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

int main(int argc, char *argv[])
{
  char* string1 = "this is a test";
  char string2[] = "this is a test";
  printf("%i, %i\n", sizeof(string1), sizeof(string2));
  system("PAUSE"); 
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

当它输出string1的大小时,它打印4,这是预期的,因为指针的大小是4个字节.但是当它打印string2时,它输出15.我认为数组是一个指针,所以string2的大小应该与string1相同吗?那么为什么它为相同类型的数据(指针)打印出两种不同的大小呢?

c arrays string pointers

5
推荐指数
2
解决办法
1344
查看次数

为什么对于具有指定长度的数组,C中的字符串赋值是不可能的?

可能重复:
C中的char s []和char*s有什么区别?
关于指针的这些陈述是否具有相同的效果?

这段时间我一直认为每当我需要复制一个字符串(文字或变量)时我都需要使用strcpy().但是我最近发现了这个:

char a[]="test";
Run Code Online (Sandbox Code Playgroud)

还有这个

char *a="test";
Run Code Online (Sandbox Code Playgroud)

根据我的理解,第二种类型是不安全的,并且在某些情况下会打印垃圾.那是对的吗?是什么让我更加好奇是为什么以下不起作用:

char a[5];
a="test";
Run Code Online (Sandbox Code Playgroud)

或这个

char a[];
a="test";
Run Code Online (Sandbox Code Playgroud)

但这有效

char *a;
a="test";
Run Code Online (Sandbox Code Playgroud)

如果有人能稍微清理一下,我会很高兴.

c string initialization literals

5
推荐指数
2
解决办法
5427
查看次数

在C中初始化一个char指针.为什么认为危险?

可能重复:
C中的char s []和char*s有什么区别?

我初始化一个char指针:

char *a="test";
Run Code Online (Sandbox Code Playgroud)

我在某些地方读到这被认为是只读的,这很危险.

这是否意味着"test"堆中没有分配空间?这是否意味着字符串"test"可以在程序中稍后写入?

---扩大我的问题---

如果我已a按上述方式进行了初始化,那么我会进行一系列其他初始化,例如:

int b=20;
char c[]="blahblahblah";
Run Code Online (Sandbox Code Playgroud)

内存中的"测试"会被"20"或"blah"覆盖吗?或者这种情况没有根据?

c pointers initialization char

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

C中char []和char*之间的区别

C中的char [] s和char*s有什么区别?我知道两者都创建了make's'指向字符数组的指针.然而,

char s[] = "hello";
s[3] = 'a';
printf("\n%s\n", s);
Run Code Online (Sandbox Code Playgroud)

打印helao,而

char * s = "hello";
s[3] = 'a';
printf("\n%s\n", s);
Run Code Online (Sandbox Code Playgroud)

给我一个分段错误.为什么会有这样的差异?我在Ubuntu 12.04上使用gcc.

c string pointers

5
推荐指数
2
解决办法
6495
查看次数

需要帮助来理解我书中的错误示例的含义

所以这是代码:

#include <stdio.h>

int main() {
    char str1[] ="Hello", str2[20] ="Hi";
    char *p ="Hello", *s ="Hi";
    str1 = "Adieu";
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

现在我的书给出了这个原因

error, constant pointer cannot change
Run Code Online (Sandbox Code Playgroud)

当我运行它时,我收到错误:

error: assignment to expression with array type
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么我的书这么说?,指针从哪里来的?

这本书是Yashavant P. Kanetkar 的Let us C 第 18 版(问题发布时的最新版本),以防您需要参考。

c compiler-errors

5
推荐指数
1
解决办法
85
查看次数

C函数参数char*vs char []

我认为这个问题是这个SO答案的延伸.说我有以下代码:

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

void func(char *str)
{
    strcpy(str, "Test");
}

int main()
{
    char testStr[20] = "Original";
    func(testStr);
    printf("%s\n", testStr);  /* Prints "Test" followed by a new-line */
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

根据我的理解,不应该func期望指向只读文字的指针作为参数?然而,传递的是只读文字堆栈上的副本.

即使这会产生正确的结果,这样做是否100%正确?难道提高代码的可读性,如果func()接受char [],而不是char *

c arguments function

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