char *ptrChar;
Run Code Online (Sandbox Code Playgroud)
我知道这ptrChar是一个指向char的指针.指向字符串的命令是什么?
编辑:如果它是相同的(ptr到char与ptr到字符串) - 下面的变量定义代表什么?
char (*ptr)[N];
Run Code Online (Sandbox Code Playgroud)
我糊涂了.
还有一个功能,它还没有工作.我基本上是通过使用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) 为什么是:
char *ptr = "Hello!"
Run Code Online (Sandbox Code Playgroud)
不同于:
char ptr[] = "Hello!"
Run Code Online (Sandbox Code Playgroud)
具体来说,我不明白为什么你可以使用(*ptr)++来改变数组中'H'的值,而不是指针.
谢谢!
我有一个字符串:
str1 = "abcabcabc";
Run Code Online (Sandbox Code Playgroud)
如何删除第一个字符?我希望最终结果是:
str1 = "bcabcabc";
Run Code Online (Sandbox Code Playgroud) 可能重复:
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相同吗?那么为什么它为相同类型的数据(指针)打印出两种不同的大小呢?
这段时间我一直认为每当我需要复制一个字符串(文字或变量)时我都需要使用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)
如果有人能稍微清理一下,我会很高兴.
我初始化一个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中的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.
所以这是代码:
#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 版(问题发布时的最新版本),以防您需要参考。
我认为这个问题是这个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 *?